2012-10-24 4 views
6

현재 준비된 문과 함께 SQL_CALC_FOUND_ROWS를 구현하는 방법에 대해 머리를 쓰고 있습니다.MySQLi/Prepared Statements 및 SQL_CALC_FOUND_ROWS

저는 페이지 매김 클래스를 작성 중이며 분명히 LIMIT를 쿼리에 추가하고 총 행 수를 찾고 싶습니다.

해당 클래스의 예제입니다. 나는 조금에 관한 난처한 상황에 빠진거야

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

는 어떻게 SQL_CALC_FOUND_ROWS 실제 값을 얻으려면? 내가 좋아하는 뭔가를 추가 생각했다 :

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

그러나 위의 예는 3보다는 그것이 있어야하는 전체 6 그래서에만 LIMIT에 따라 번호를 제공합니다.

희망이 있습니다.

+0

좋아, 내가 이후로 내가 선택한 FOUND_ROWS()를 사용해야하지만 나도 이걸 구현하는 방법을 여전히 확실하지 발견 했나요? 완전히 새로운 쿼리처럼 실행해야합니까? – cosmicsafari

답변

9

알아서 관리하고, 미래에 관심있는 모든 사람들에게 내 대답을 자세히 설명해 드리겠습니다.

원본 코드

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

업데이트 코드

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

아마 더 나은 다른 방법으로 그것을 할 수 있지만,이 작품 어디서나 온라인 어떤 좋은 예를 찾을 수가 없습니다!

+2

"while"은 단 한 줄만 반환하므로 사용하지 않아도됩니다. –