2013-02-04 42 views
6

tôi đang cố gắng hiểu tiện ích mở rộng mysqli và đã làm google nhưng có rất ít thông tin về điều này ngoại trừ php.net hữu ích.cách nhận tổng số hàng với mysqli

bây giờ sau khi tất cả điều này tôi đang cố gắng để đạt được những gì tôi có thể mở rộng với mysql đó là như sau:

// MYSQL STYLE OF fetching array, query limit and perform total row count all at once 

$sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla FROM account ORDER BY pid ASC". $eb["array"]['querylimit']; 

$result = mysql_query($sql, $eb["con"]); 
$TotalRcount = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()")); 

// Performing record count [current] 
// $RecordCount = mysql_num_rows($result); 

while($row = mysql_fetch_array($result)){ 
    // read columns 
} 

với mysqli làm thế nào tôi có thể đạt được điều này? chắc chắn tôi đang thiếu nhiều thứ. hãy giúp tôi với ví dụ về cách đạt được mục tiêu của mình.

Trả lời

-1

sử dụng mysqli bạn làm điều đó theo cách sau (giả sử đối tượng mysqli đã được tạo ra - bạn cũng có thể sử dụng procedure methods, chỉ hơi khác nhau):

$sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla 
     FROM account ORDER BY pid ASC". $eb["array"]['querylimit']; 
$result = $mysqli->query($sql); 
$TotalRcount = $result->num_rows; 
while($row=$result->fetch_assoc()){ 
    $col1 = $row['col1']; // col1 is a placeholder for whatever column you are reading 
    //read columns 
} 
+1

Cảm ơn ajon, hoạt động tốt. tôi có thể nhận được các giá trị cột. nhưng sử dụng num_rows cho số hàng hiện tại mà không phải là những gì tôi dự định đạt được. tôi đã cố đếm tổng số hàng. ví dụ. tôi có 35 hàng và chọn xem 10 truy vấn cho mỗi yêu cầu. như: hiển thị 10 trong số 35 thứ như thế. –

6

Bạn có thể thử này:

//Establish connection using mysqli api 
$conn = mysqli_connect('hostname', 'username', 'password', 'database_name'); 

$sql = "SELECT SQL_CALC_FOUND_ROWS *, post.id as pid, bla bla FROM account ORDER BY pid ASC". $eb["array"]['querylimit']; 

$sql2 = "SELECT FOUND_ROWS()"; 

$result1 = $conn->query($sql); 
$result2 = $conn->query($sql2); 
$TotalRcount = $result2->fetch_row(); 

// Performing record count [current] 
// $RecordCount = $result->num_rows(); 

while($row = $result->fetch_array(MYSQLI_BOTH)){ 
    // read columns 
} 

Trong một vòng lặp while tôi đã sử dụng hằng số MYSQLI_BOTH nhưng bạn có thể thay đổi nó thành MYSQLI_NUM hoặc MYSQLI_ASSOC cho dù bạn cần.

+1

Cảm ơn câu trả lời này. Tôi đã thử điều này và $ TotalRcount = $ result2-> fetch_row(); trả về một mảng với tổng số hàng thực tế trong chỉ mục 0 – dmeehan

1

SQL_CALC_FOUND_ROWS thường được sử dụng trong các câu lệnh SELECT có mệnh đề LIMIT.

Từ hướng dẫn MySQL (https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows):

Một SELECT tuyên bố có thể bao gồm một LIMIT khoản để hạn chế số lượng hàng trở về máy chủ cho khách hàng. Trong một số trường hợp , bạn nên biết có bao nhiêu hàng tuyên bố có thể đã trả lại mà không có LIMIT, nhưng không chạy lại tuyên bố đó. Để có được số hàng này, bao gồm một tùy chọn SQL_CALC_FOUND_ROWS trong câu lệnh SELECT, và sau đó gọi FOUND_ROWS() sau đó

Trong ví dụ của bạn ở trên, bạn không sử dụng LIMIT để giữ số lượng kết quả xuống để sử dụng Hàm FOUND_ROWS() sẽ chỉ có nghĩa là một cuộc gọi bổ sung trở lại cơ sở dữ liệu. Vui lòng xem các câu trả lời khác ở đây để biết thông tin về cách lấy số hàng được trả về. Chúc may mắn.

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