2012-10-24 15 views
6

Im वर्तमान में तैयार किए गए कथन के साथ SQL_CALC_FOUND_ROWS को कार्यान्वित करने के तरीके पर अपने सिर को खरोंच कर रहा हूं।MySQLi/तैयार स्टेटमेंट्स और 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 है कि यह होना चाहिए में तो।

आशा है कि यह समझ में आता है।

+0

ठीक है, मुझे पता चला है कि मुझे SELECT 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

आपको "थोड़ी देर" का उपयोग करने की आवश्यकता नहीं है क्योंकि यह सिर्फ एक पंक्ति को लौट रहा है –

संबंधित मुद्दे