2013-02-04 22 views
6

Próbuję zrozumieć rozszerzenie mysqli i zrobiłem google ale dostałem bardzo mało informacji na ten temat z wyjątkiem php.net, który był pomocny.jak uzyskać całkowitą liczbę wierszy z mysqli

teraz po tym wszystkim staram się osiągnąć, co mogłem z rozszerzenia mysql brzmi następująco:

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

z mysqli w jaki sposób można to osiągnąć? Jestem pewien, że brakuje mi wielu rzeczy. proszę pomóż mi z przykładem, jak osiągnąć mój cel.

Odpowiedz

-1

użyciu mysqli zrobić to w następujący sposób (zakładając mysqli obiekt jest już utworzony - można również użyć procedure methods, tylko nieznacznie różnić):

$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

Dzięki ajon, działa dobrze. mogę uzyskać wartości kolumn. ale użycie num_rows daje obecną liczbę wierszy, co nie jest tym, co zamierzam osiągnąć. Próbowałem policzyć całkowitą liczbę rzędów. na przykład Mam 35 wierszy i wybieram wyświetlanie 10 zapytań na żądanie. lubię: pokazywanie 10 z 35 takich rzeczy. –

6

Możesz spróbować tego:

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

W pętli while używam stałej MYSQLI_BOTH, ale możesz ją zmienić na MYSQLI_NUM lub MYSQLI_ASSOC, w zależności od potrzeb.

+1

Dziękuję za tę odpowiedź. Próbowałem tego i $ TotalRcount = $ result2-> fetch_row(); zwraca tablicę z rzeczywistą całkowitą liczbą wierszy w indeksie 0 – dmeehan

1

SQL_CALC_FOUND_ROWS jest zwykle używany w instrukcjach SELECT z klauzulą ​​LIMIT.

z podręcznika MySQL (https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows):

SELECT może zawierać klauzulę LIMIT aby ograniczyć liczbę wierszy Serwer zwraca do klienta. W niektórych przypadkach: pożądane jest wiedzieć, ile wierszy instrukcja powróciłaby bez wartości LIMIT, ale bez ponownego uruchamiania instrukcji . Aby uzyskać tę liczbę wierszy, obejmują opcję SQL_CALC_FOUND_ROWS w SELECT, a następnie powołać FOUND_ROWS() potem

W przykładzie powyżej, nie używasz LIMIT aby utrzymać liczbę wyników na dół więc przy użyciu FOUND_ROWS() będzie oznaczać tylko dodatkowe połączenie z bazą danych. Sprawdź inne odpowiedzi tutaj, aby dowiedzieć się, jak uzyskać liczbę zwróconych wierszy. Powodzenia.

Powiązane problemy