• 05-11-2009, 23:51:42
    #1
    Merhaba,

    Benim şöyle bir sorunum var. Ben MySQL sorgumda 12 tane içerik yazdırmak istiyorum. Yanyana sıralanmasını istediğim bu içerikleri 6 + 6 olarak yazdırıyorum. Ancak son eklenen 10 içerikten sonra başlamasını istiyorum.

    Onun için sorguyu şöyle denedim:
    <?
    for($i=0;$i<12;$i++)
    {
    $veri=mysql_fetch_array( mysql_query("SELECT * FROM jos_content WHERE sectionid='2' AND state='1' ORDER BY created DESC LIMIT 10,16" , $link));
    ?>
    Yukarıda görüldüğü gibi LIMIT 10,16 demişim.

    Sonraki altı içeriği yazdırmak içinse şöyle yazmışım:
    <?
    $i++;
    $veri=mysql_fetch_array( mysql_query("SELECT * FROM jos_content WHERE sectionid='2' AND state='1' ORDER BY created DESC LIMIT 16,22" , $link));
    ?>
    Görüldüğü gibi bu sefer LIMIT 16,22 demişim. Yani ikinci stundaki 6 içerik 16'ncı içerikten başlayarak 22'nci içeriğe kadar (son eklenenlere göre) sıralansın.

    Ancak anasayfamda 16'ncı içerik 6 defa, 22'nci içerik de 6 defa tekrar yazılıyor.

    Ustalarımın çözümünü bekliyorum, selamlar.
  • 05-11-2009, 23:53:47
    #2
    mysql sorgularını for döngüsü dışına alırsan sorun çözülebilir
  • 05-11-2009, 23:55:00
    #3
    Üyeliği durduruldu
    Yanlız LIMIT olayı senin dediğin gibi işlemiyor. Yani 16. içerikten başla 22. içeriğe kadar git olarak değil. Onun mantığı şöyle;

    LIMIT 16,22

    16. içerikten başlayarak 22 tane göster demek.

    LIMIT 0,10 ( ilk içerikten başla 10 tane saydır)
    LIMIT 10,10 (10 veridne başla 10 tane saydır)
    LIMIT 20,30 (20 veriden başla 30 tane saydır)
    v.s şeklinde oluyor.

    Senin kodun LIMIT 16,6 olucak bu durumda yazmayı unuttum =)
  • 06-11-2009, 00:04:54
    #4
    Teşekkürler MrHades !

    Peki YuqseLX usta, nasıl FOR döngüsünün dışına alacağım ?
  • 06-11-2009, 01:28:07
    #5
    GROUP BY ile aynı kayıtlardan 1 tane gelmesini sağlayabilirsiniz.
  • 06-11-2009, 20:19:26
    #6
    OfisSoft, ne dediğini anlamadım hocam.

    MrHades hocamın dediklerini yerine getirdim ama hâlâ 11'nci haberi 6 defa tekrarlıyor, 22'nci haberi de 6 defa tekrarlıyor.

    YuqseLX birşey dedi, FOR döngüsünün dışına çıkar dedi, ama pratikte ancak gösterirse anlama şansım olur.

    Bu sorunla uğraşmaya devam ediyorum...
  • 06-11-2009, 20:34:40
    #7
    Üyeliği durduruldu
    php den pek anlamam normalde asp'ciyimdir ama mantıken söyliyim sana, yanlışım varsa php bilen bir arkadaş düzeltsin..

    $veri1=mysql_query("SELECT * FROM jos_content WHERE sectionid='2' AND state='1' ORDER BY created DESC LIMIT 10,6" , $link);    
        while($veri_cek1=mysql_fetch_array($veri1))  
    { 
    
    }


    $veri2=mysql_query("SELECT * FROM jos_content WHERE sectionid='2' AND state='1' ORDER BY created DESC LIMIT 16,6" , $link);    
        while($veri_cek2=mysql_fetch_array($veri2))  
    { 
    
    }
    for ile yaptığında her seferinde aynı sorguyu çalıştırdığı için hep aynı kayıt geliyor, while kullanacaksın for yerine
  • 06-11-2009, 23:21:43
    #8
    PHP'ci ustalardan sorunumla ilgilenmelerini rica ediyorum, yapamadım gerçekten.
  • 06-11-2009, 23:41:19
    #9
    Arkadaşım zaten pratik olarak bu tip sorgular döngü içinde kullanılmaz. Şu yöntemi kullanabilirsin.

    <?php
    $sorgu = sorgu cümlen;

    while ($veri = mysql_fetch_array ($sorgu)) {
    //while da, for gibi bir döngüdür. ve buraya yazdığın her kod, database'den dönen satırlar için sırayla çalıştırılacaktır. Misal echo $veri['id']; dediğinde, dönen tüm satırların id'lerini yazdıracaktır.
    }

    ?>

    umarım anlatabilmişimdir.