2010-12-21 3 views
2
$sql ="select * from user limit 5"; 

est là de toute façon que je peux obtenir un nombre limité de résultats, mais avec des résultats totaux sans limite.obtenir le résultat de deux requête avec une requête - mysql

Fondamentalement, je veux le résultat de moins de deux requêtes dans une seule requête.

query 1 : select count(*) from user 
query 2 : select * from user LIMIT 5 

est-ce possible sans aucune sous-requête?

+0

'COUNT()' est une fonction d'agrégat. Cela implique qu'il fusionne les lignes. Je ne pense pas que ce soit possible de manière efficace. – jwueller

+0

cmon personnes Syndiquer! – Matt

Répondre

0

Que diriez-vous quelque chose comme

select *, 
     (select count(*) from user) TotalUsers 
from user 
LIMIT 5 

Ou peut-être

select user.*, 
     TotalUsers.TotalCnt 
from user, 
     (select count(*) TotalCnt from user) TotalUsers 
LIMIT 5 
+0

est-il possible que je puisse éliminer ces sous-requêtes? cela peut-il être fait en une seule requête? – Avinash

+0

Pas que je sache. –

1
select *, '' as total from user limit 5 
UNION 
select *,count(*) as total from user group by id>0 
+0

édité, comme ceci – Matt

+0

sélectionnez * de la limite d'utilisateur 5 union sélectionnez le nombre (*) comme total de l'utilisateur J'ai essayé ceci, mais en donnant l'erreur ..... Y at-il quelque chose de mal? – Avinash

+0

assurez-vous que son 'union select *, compte (*) 'pas simplement' union select count (*) ' – Matt

0

Ceci est un problème commun, et pour autant que je sache, il est tout simplement impossible .. Stick avec deux les requêtes, c'est rapide et clair.

0

requête unique ne peut se joindre ou sans union, cependant, vous pouvez essayer quelque chose comme

select sql_calc_found_rows * from user limit 5; 
select found_rows(); <-- total from first query 
1

Peut-être un peu en retard, mais la réponse peut aider quelqu'un d'autre.

Il est possible de dire MySql revenir seulement les 5 premiers résultats et calculer le nombre total, en utilisant SQL_CALC_FOUND_ROWS, comme expliqué ici http://www.arraystudio.com/as-workshop/mysql-get-total-number-of-rows-when-using-limit.html

Vous émettez deux requêtes, mais dans le premier que vous faites allusion le moteur db calcule et conserve le nombre total de lignes qui seraient renvoyées sans la clause LIMIT

Questions connexes