2010-07-16 18 views
1

Dans la requête suivante:Comment obtenir le nombre de lignes qui auraient été retournées?

SELECT column1,column2 FROM table1 ORDER BY column1 LIMIT 0,30 

Comment puis-je savoir le nombre de lignes qui auraient été retournés ne fût-ce pas pour le LIMIT?

Modifier: Je suis à la recherche d'un moyen de travailler cela dans la requête ci-dessus et ne pas faire une requête distincte. (Si possible.)

Répondre

0

Si vous faites cette requête:

SELECT SQL_CALC_FOUND_ROWS column1,column2 FROM table1 ORDER BY column1 LIMIT 0,30; 

Vous pouvez récupérer le nombre de lignes de la précédente SELECT trouvé avec

select FOUND_ROWS(); 

Si vous devez vraiment le faire avec une requête, vous devez utiliser un sous select (which'll ont le disatvantage d'ajouter une colonne supplémentaire à chaque ligne ..)

SELECT column1,column2,s.total FROM table1, 
    (select count(*) as total from table1) s 
ORDER BY column1 LIMIT 0,30; 
+0

http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ –

+0

Ah, cela ressemble à ce que je vais devoir faire. –

3
SELECT COUNT(*) FROM table1; 
+0

Est-ce une partie de ma requête ci-dessus, ou une requête séparée? Je savais comment faire ça ... J'espérais trouver un moyen de l'intégrer dans ma requête existante. –

+0

@George Edison: requête séparée - SQL standard vous oblige à définir une clause GROUP BY pour les colonnes qui n'utilisent pas des fonctions d'agrégation (COUNT, MIN, MAX, etc.) dans la clause SELECT, qui aurait une incidence sur votre resultset. –

+0

À quoi cela ressemblerait-il? –