2012-10-24 34 views
6

Hiện tại tôi đang gãi đầu về cách triển khai SQL_CALC_FOUND_ROWS với các câu lệnh đã chuẩn bị.Báo cáo MySQLi/Chuẩn bị & SQL_CALC_FOUND_ROWS

Tôi đang viết một lớp phân trang và rõ ràng là tôi muốn thêm LIMIT vào truy vấn nhưng cũng tìm thấy tổng số hàng sẽ là bao nhiêu.

Đây là ví dụ từ lớp học được đề cập.

$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 
     } 

Tôi hơi bối rối về cách lấy giá trị thực của SQL_CALC_FOUND_ROWS? Tôi đã nghĩ thêm vào một cái gì đó như:

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

Nhưng điều đó chỉ đưa ra một số dựa trên LIMIT, vì vậy trong ví dụ trên, số 3 của nó thay vì toàn bộ 6 mà nó cần phải có.

Hy vọng điều đó có ý nghĩa.

+0

Ok, tôi có kể từ khi phát hiện ra tôi cần phải sử dụng SELECT FOUND_ROWS() nhưng im vẫn không chắc chắn làm thế nào để thực hiện điều này? Tôi có cần chạy nó như một truy vấn hoàn toàn mới không? – cosmicsafari

Trả lời

9

Được quản lý để tìm ra, tôi sẽ nêu chi tiết câu trả lời của tôi bên dưới cho bất kỳ ai quan tâm đến tương lai.

gốc Mã

$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 
    } 

Mã Cập nhật

$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 
    } 

lẽ có thể làm điều đó tốt hơn một cách khác nhưng dường như không thể tìm thấy bất kỳ ví dụ tốt bất cứ nơi nào trên mạng và các công trình này!

+2

Bạn không cần sử dụng "while" vì nó chỉ trả về một hàng –

Các vấn đề liên quan