• 26-09-2010, 21:52:35
    #1
    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.
  • 26-09-2010, 21:53:45
    #2
    sezonu bi kolona bölümüde diğer kolona al ne uğraşıon bilader azıcık mysql kasılsın yav
  • 26-09-2010, 21:54:40
    #3
    Haymac adlı üyeden alıntı: mesajı görüntüle
    sezonu bi kolona bölümüde diğer kolona al ne uğraşıon bilader azıcık mysql kasılsın yav
    hacı konuyu anlamadan yazmışsın heralde o dedigini yapsam da yine aynı sorun olacak
  • 26-09-2010, 21:55:45
    #4
    fatal adlı üyeden alıntı: mesajı görüntüle
    hacı konuyu anlamadan yazmışsın heralde o dedigini yapsam da yine aynı sorun olacak
    kafam güzel konu güzel isa güzel glup glup glup
  • 26-09-2010, 22:00:06
    #5
    ş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
    #6
    Ü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:50
    #7
    SNaRe adlı üyeden alıntı: mesajı görüntüle
    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 .


    $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
    #8
    Üyeliği durduruldu
    O 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
    $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:13:46
    #9
    Ü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.