2012-10-24 14 views
6

Şu anda hazırladığım ifadelerle SQL_CALC_FOUND_ROWS'yi nasıl uygulayacağım konusunda kafamı çiziyorum.MySQLi/Prepared Statements & SQL_CALC_FOUND_ROWS

Bir pagination sınıfı yazıyorum ve açıkçası ben soruna LIMIT eklemek istiyorum ama aynı zamanda toplam satır sayısı ne olacağını bulmak.

Bu, söz konusu sınıftan bir örnek. Biraz olarak stumped

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
      $stmt->execute()or die($connection->error); //execute query 
      $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
      while($stmt->fetch()){ 
       $jobs[$x]['id']=$id; 
       $jobs[$x]['title']=$title; 
       $jobs[$x]['location']=$location; 
       $jobs[$x]['salary']=$salary; 
       $jobs[$x]['employer']=$employer; 
       $jobs[$x]['image']=$image; 
       $x++; 
      } 
      $stmt->close();//close statement 
     } 

nasıl SQL_CALC_FOUND_ROWS gerçek değerini almak için? Ben böyle bir şey ekleyerek düşünmüştü:

  $stmt->store_result(); 
      $count=$stmt->num_rows; 

Fakat yukarıdaki örnekte onun 3 ziyade olması gerektiğini tam 6'da böylece yalnızca LIMIT dayalı bir numara verir.

Bunun mantıklı olmasını umuyorum.

+0

Tamam, SELECT FOUND_ROWS() yöntemini kullanmam gerektiğini öğrendim, ancak bunu nasıl uygulayacağınızdan hala emin değilim? Tamamen yeni bir sorgu gibi çalıştırmam gerekiyor mu? – cosmicsafari

cevap

9

Bunu çözmek için yönetilen, geleceğe ilgi duyan herkes için cevabımı aşağıda ayrıntılı olarak açıklayacağım.

Orjinal Kod

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
     $stmt->execute()or die($connection->error); //execute query 
     $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
     while($stmt->fetch()){ 
      $jobs[$x]['id']=$id; 
      $jobs[$x]['title']=$title; 
      $jobs[$x]['location']=$location; 
      $jobs[$x]['salary']=$salary; 
      $jobs[$x]['employer']=$employer; 
      $jobs[$x]['image']=$image; 
      $x++; 
     } 
     $stmt->close();//close statement 
    } 

Güncelleme Kod

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
     $stmt->execute()or die($connection->error); //execute query 
     $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
     while($stmt->fetch()){ 
      $jobs[$x]['id']=$id; 
      $jobs[$x]['title']=$title; 
      $jobs[$x]['location']=$location; 
      $jobs[$x]['salary']=$salary; 
      $jobs[$x]['employer']=$employer; 
      $jobs[$x]['image']=$image; 
      $x++; 
     } 
      //get total number of rows. 
      $query="SELECT FOUND_ROWS()"; 
      $stmt = $connection->prepare($query); 
      $stmt->execute(); 
      $stmt->bind_result($num); 
      while($stmt->fetch()){ 
       $count=$num; 
      } 

     $stmt->close();//close statement 
    } 

Muhtemelen daha iyi başka bir yol yapabileceğini ama bu işleri her yerde çevrimiçi herhangi iyi örnekler bulmak gibi olamazdı!

+2

Sadece bir satır döndürdüğü için "while" i kullanmanız gerekmiyor –

İlgili konular