2010-02-16 12 views
3

Dites la table users dans mon MySQL DB contient un très grand nombre d'entrées.SQL: Comptage du nombre de résultats correspondant à l'utilisation d'un LIMIT requête

J'ai besoin de passer par tous les utilisateurs, mais je veux le faire que des morceaux à la fois (en utilisant LIMIT et OFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

Est-il possible de connaître le nombre total de les utilisateurs correspondent dans la requête, mais ne renvoient qu'un nombre limite d'entre eux? En d'autres termes, est-il possible pour moi de connaître à l'avance le nombre total d'utilisateurs qui existent, sans faire de requête séparée?

Répondre

4

Vous pouvez le faire en (presque) une requête, en utilisant SQL_CALC_FOUND_ROWS and FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200; 
SELECT FOUND_ROWS(); 

Pendant que vous finissez toujours avec deux ensembles de résultats, la requête réelle est exécutée une seule fois, ce qui vous évite de codage répétitif et possible quelques cycles de CPU gaspillés.

0

Malheureusement non. Vous devez faire deux requêtes: une pour récupérer le nombre total d'utilisateurs, l'autre pour aller chercher une seule page d'utilisateurs.

select count(*) from users; 
select * from users limit 0,10; 
0

Ce n'est pas possible dans la norme SQL. Je ne connais pas beaucoup de choses, mais je suppose que ce n'est pas possible même dans une extension SQL.