arkadaşlar merhaba direk soruya geçiyorum:
şimdi elimde video db var diyelim, bölümler tablosunda şu videolar olsun:
Kavak Yelleri 1. Sezon 1. Bölüm
Kavak Yelleri 1. Sezon 2. Bölüm
Kavak Yelleri 1. Sezon 3. Bölüm
Kavak Yelleri 2. Sezon 1. Bölüm
Kavak Yelleri 2. Sezon 2. Bölüm
Kavak Yelleri 10. Sezon 1. Bölüm
Kavak Yelleri 10. Sezon 2. Bölüm
şimdi select * from videolar order by isim denildiğinde şöyle saçma sapan bir çıktı geldiğini çoğu kişi biliyordur muhtemelen:
Kavak Yelleri 1. Sezon 1. Bölüm
Kavak Yelleri 1. Sezon 2. Bölüm
Kavak Yelleri 1. Sezon 3. Bölüm
Kavak Yelleri 10. Sezon 1. Bölüm
Kavak Yelleri 10. Sezon 2. Bölüm
Kavak Yelleri 2. Sezon 1. Bölüm
Kavak Yelleri 2. Sezon 2. Bölüm
yani mysql rakamları şu şekilde sıralıyor: 1,10,11,12....,19,2,20,21,22,...,3,30
şimdi bu sorunu halletmek için sorguya şunu ekledim
select * from videolar order by isim+0
isim+0 dediğim için isim column'u nu integer'a çevirmiş oldum, şimdi böyle diyince düzgün çıktı veriyor, yani şöyle:
Kavak Yelleri 1. Sezon 1. Bölüm
Kavak Yelleri 1. Sezon 2. Bölüm
Kavak Yelleri 1. Sezon 3. Bölüm
Kavak Yelleri 2. Sezon 1. Bölüm
Kavak Yelleri 2. Sezon 2. Bölüm
Kavak Yelleri 10. Sezon 1. Bölüm
Kavak Yelleri 10. Sezon 2. Bölüm
bu şekilde mysql i yola getirmiş oluyoruz, evet gelelim benim sorunuma,
ben 1. sezondan 10. sezona değilde, 10. sezondan 1. sezona doğru çıktı almak istiyorum, bunun için ise:
select * from videolar order by isim+0 desc dediğimde de yukardaki çıktı geliyor
select * from videolar order by isim+0 asc dediğimde de yukardaki çıktı geliyor
yani asc ve desc yöntemleri yemiyor burda,
while($bas=mysql_fetch_Array($al))
{
$bas=array_reverse($bas);
...
}
dediğimde de olmuyor, bu arrayi nasıl reverse ederiz, mysql ile reverse çözümü önceliğimdir, php ile önerisi olan da yazabilir.
teşekkürler.
Mysql order by yapılan column'da hem integer hem de string varsa...
27
●2.287
- 26-09-2010, 21:54:40hacı konuyu anlamadan yazmışsın heraldeHaymac adlı üyeden alıntı: mesajı görüntüle
o dedigini yapsam da yine aynı sorun olacak
- 26-09-2010, 21:55:45
- 26-09-2010, 22:00:06şunu da belirteyim,
normal mysql_fetch_array de id leri bir array'e atıp, daha sonra o array'i reverse edip, daha sonra ikinci bir query ile order by field(id,id_arrayimiz) diyip te halledebilirim bu işi,
fakat 2 kere mysql sorgusu yapmış olacağım bu şekilde, profesyonel adam bu hatayı yapmaz
- 26-09-2010, 22:03:10Üyeliği durduruldu
while($bas=mysql_fetch_Array($al)) { $bas=array_reverse($bas); ... }Bunu yaptığında ne kadar row varsa o kadar döneceğinden $bas=array_reverse($bas); zaten çalışmaz. Bir kere $bas['baslik'] gibi alman gerekiyor.
Yapacağın şu
while($bas=mysql_fetch_Array($al)) { $baslik[] = $bas['baslik']; ... } $baslik = array_reverse($baslik);yaptımı işin hallolcak. Mysql çözümünü AS kullanarak olacağını düşünüyorum ama uzun zamandır mysqlin ince ayrıntılarıyla uğraşmadığımdan hatırlayamadım şimdi. Yukardaki çözecek işini . - 26-09-2010, 22:07:50SNaRe adlı üyeden alıntı: mesajı görüntüle
$bas=array_reverse($bas); kısmını burda eksik yazmışım, onu şöyle yapmıştım normalde
$i=0;
while($bas=mysql_fetch_array($al))
{
if($i==0){$bas=array_reverse($bas);}
$i++;
}
1 kere reverse ediyordum yani olmadı böyle,
herneyse 2. dediğine gelirsek eğer, senin dediğin şekilde de olur, bir üst mesajımda yazdığım şekilde de olur, fakat senin dediğin şekilde, arraye 1000 tane video attığımı ve sitede anlık olarak 50k insanın olduğunu düşünürsek ram yanar patlar
kısayolunu arıyorum bu işin, tek komut, bu arada teşekkürler. - 26-09-2010, 22:09:45Üyeliği durdurulduO zaman oraya PHP çözümüde olur yazmıycaksın
Bütün php çözümleri adamı buraya götürür. mysql üzerinden temiz çözüm lazım sana . Kolay gelsin. Çözümü bende merak ediyorum
fatal adlı üyeden alıntı: mesajı görüntüle - 26-09-2010, 22:13:46Üyeliği durduruldu
select * from videolar order by isim+0
yanlış düşünmediysem bu kod aslında seni kandırıyor, isim+0=0
tüm kolonlarda 0 oluşuyor ve veritabanına eklenme tarihine göre verdiği için (ve ilk bölümden eklendiyse) doğru gözüküyor.
zaten öyleyse ve idsi var ise bunların ona göre sıralatman daha uygun bence.
o dedigini yapsam da yine aynı sorun olacak

