• 27-07-2010, 14:46:43
    #1
    Meraba arkadaşlar. Çok düşündüm ama bulamadım.

    Sorum şu. Id'si x olan bir veriden önceki 5 veriyi ve sonraki 5 veriyi aynı sorgu içinde nasıl alabilir miyim?
  • 27-07-2010, 14:51:26
    #2
    Eposta Aktivasyonu Gerekmekte
    SQL sorgusunu şu şekilde yapıcaksın.
    SELECT * FROM tablo LIMIT baslangic,alincakverimiktari
    Önce 5, sonra 5 olayını matematiksel olarak hesaplayıp sql a dökersin.
  • 27-07-2010, 15:03:52
    #3
    Dualwarior adlı üyeden alıntı: mesajı görüntüle
    SQL sorgusunu şu şekilde yapıcaksın.
    SELECT * FROM tablo LIMIT baslangic,alincakverimiktari
    Önce 5, sonra 5 olayını matematiksel olarak hesaplayıp sql a dökersin.
    Aslında sorun şurda. Kategorisi kitaplar olan ve idsi x olan bir videonun yine aynı kategoride olan bu videodan önceki 5 ve sonraki 5 veriyi çekmem. Bunu dediğiniz şekilde nasıl yapacağım? Limiti kesin olarak koyamıyorum kategori olayı söz konusu olunca. Çünkü önceki 5 verinin idsi her seferinde değişiyor.
  • 27-07-2010, 15:19:48
    #4
    Eposta Aktivasyonu Gerekmekte
    BuRty adlı üyeden alıntı: mesajı görüntüle
    Aslında sorun şurda. Kategorisi kitaplar olan ve idsi x olan bir videonun yine aynı kategoride olan bu videodan önceki 5 ve sonraki 5 veriyi çekmem. Bunu dediğiniz şekilde nasıl yapacağım? Limiti kesin olarak koyamıyorum kategori olayı söz konusu olunca. Çünkü önceki 5 verinin idsi her seferinde değişiyor.
    WHERE katid='$katid' eklersin birde.
  • 27-07-2010, 15:39:46
    #5
    kategoriye göre sorgulama zaten tamam ama baslangic değerini belirlemek mümkün değil bu durumda.
  • 27-07-2010, 15:43:10
    #6
    Hepsini alıp for döngüsüyle önceki ve sonraki 5 taneyi $i-5 $i+5 diye çıkartacaksın. Aklıma bu geldi sadece.

    Mesela bi for döngüsü ile senin istediğin id numarasının satır numarasını öğrenmek gerek.

    $sorgu = mysql_query(/*sorgu kodları*/);
    
    $hepsi = array();
    while($row = mysql_fetch_assoc($sorgu))
    {
      $hepsi[] = $row;
    }
    
    for($i=0; $i <= count($hepsi); ++$i)
    {
      if($hepsi[$i]['id'] == /* istediğin id numarası */)
        $aradigimizsatirnumarasi = $i;
    }
    
    for($p= ($i-5); $p <= ($i+5); ++$i)
    {
      echo $hepsi[$p]['name'];
    }
  • 27-07-2010, 15:54:51
    #7
    select * from tablo where kat_id=$katid and id>$id limit 0,5 (sonraki 5 veri)

    select * from tablo where kat_id=$katid and id<$id limit 0,5 (önceki 5 veri)
  • 27-07-2010, 16:19:48
    #8
    Clable adlı üyeden alıntı: mesajı görüntüle
    select * from tablo where kat_id=$katid and id>$id limit 0,5 (sonraki 5 veri)

    select * from tablo where kat_id=$katid and id<$id limit 0,5 (önceki 5 veri)
    Teşekkürler. Tek sorguda yapmak istedim. Mysql sorgusunu arttırmak istemediğim için.

    Hkan adlı üyeden alıntı: mesajı görüntüle
    Hepsini alıp for döngüsüyle önceki ve sonraki 5 taneyi $i-5 $i+5 diye çıkartacaksın. Aklıma bu geldi sadece.

    Mesela bi for döngüsü ile senin istediğin id numarasının satır numarasını öğrenmek gerek.

    $sorgu = mysql_query(/*sorgu kodları*/);
    
    $hepsi = array();
    while($row = mysql_fetch_assoc($sorgu))
    {
      $hepsi[] = $row;
    }
    
    for($i=0; $i <= count($hepsi); ++$i)
    {
      if($hepsi[$i]['id'] == /* istediğin id numarası */)
        $aradigimizsatirnumarasi = $i;
    }
    
    for($p= ($i-5); $p <= ($i+5); ++$i)
    {
      echo $hepsi[$p]['name'];
    }
    Teşekkürler. Fakat yaklaşık 13bin konu var. Verdiğiniz yöntem mysql yükünü nasıl etkiler.
  • 27-07-2010, 16:23:37
    #9
    Benim verdiğim kodlar mysql'de normal bi sorgudan daha fazla yüklenmeye neden olmaz. Çünkü sorguyu yapıp her şeyi PHP ile hallediyorum sonra.