2010-03-13 16 views

risposta

31

Quello che state cercando è this

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME 
FROM table1 A 
JOIN table2 B ON (A.ID = B.TABLE1_ID) 
WHERE 
    cond1, cond2, ..., condN 
LIMIT 10 

SELECT FOUND_ROWS(); 
+0

Grazie! Funziona bene nel monitor MySQL. Ma in PHP la seconda query restituisce 1. Come eseguire correttamente queste due query in PHP? – SaltLake

+1

Quale versione di PHP hai installato? Dai un'occhiata a questo http://stackoverflow.com/questions/674061/sql-calc-found-rows-found-rows-does-not-work-in-php – Shuriken

7

È possibile utilizzare SQL_CALC_FOUND_ROWS with FOUND_ROWS() per contare il numero di risultati durante l'esecuzione di tale query. Fondamentalmente basta aggiungere 'SQL_CALC_FOUND_ROWS' dopo 'SELECT' e quindi eseguire un'altra query 'SELECT FOUND_ROWS()' dopo. Non è possibile inviare nuovamente il conteggio nella stessa query perché non può conoscere il conteggio fino al termine della query.

5

'tis 4 anni dopo l'ultima risposta, ma questo è come ho risolto il problema. Sebbene la risposta di SaltLake abbia prodotto un errore per me, mi ha portato alla risposta corretta.

SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION 
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL 
ORDER BY IssueDate, VolumeNo 

La parte unione è molto importante, perché tag la risposta desiderata (numero totale di righe) che viene recuperata nel risultato secondo Selezionare sulla prima Select risultati.

altro punto molto importante è che, poiché un UNION avviene, entrambe le tabelle devono avere lo stesso numero di colonne in loro. Questo di solito significa che devi eseguire il SECONDO Select con l'importantissimo valore FOUND_ROWS() e poi molti valori NULL.

Il risultato finale sarà un comando che restituisce 11 righe di informazioni, con una di queste righe contenenti il ​​numero totale di righe. Ovviamente, è necessario escludere la riga TotalRows aggiuntiva quando si utilizza il risultato.

-1

Si dovrebbe usare

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount 
FROM table1 A 
JOIN table2 B ON (A.ID = B.TABLE1_ID) 
WHERE 
    cond1, cond2, ..., condN 
LIMIT 10 
Problemi correlati