Comment COUNT nombre de lignes avec LIMIT?

9

Je veux attraper X lignes, donc je mets LIMIT X; mais comment puis-je également compter simultanément le nombre total de lignes?

Actuellement, j'utilise deux requêtes distinctes pour le faire

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

Existe-t-il un moyen de le faire dans une seule requête?

EDIT: La sortie doit être les colcellules et le nombre de lignes. En fait, après avoir sélectionné les colcellules, il doit parcourir le tableau pour ne compter que.

Je sais qu'il n'est pas possible de fusionner ces deux requêtes, car la première renvoie 1 ligne, mais les secondes X lignes. Je suis curieux de savoir s'il existe une fonction dans mysql pour retourner le nombre de lignes en présence de LIMIT.

Googlebot
la source
Pourriez-vous afficher une ligne ou deux de votre sortie souhaitée?
dezso
1
Les deux requêtes ne sont pas compatibles, car elles sont actuellement écrites: l'une renvoie un seul enregistrement avec une seule colonne, l'autre renvoie plusieurs colonnes sur X lignes. Veuillez montrer un exemple de la sortie souhaitée si vous voulez que nous donnions une réponse significative.
FrustratedWithFormsDesigner

Réponses:

5

Il semble que vous souhaitiez exécuter LIMIT, mais sachez toujours combien de lignes auraient été renvoyées sans LIMIT. Découvrez les lignes trouvées

Alain Collins
la source
1
+ 1 pour cela FOUND ROWS, et bien qu'il exécute toujours deux requêtes, les performances peuvent être meilleures que l'exécution d'une deuxième COUNT (*) requête (selon les requêtes et le jeu de données).
Derek Downey
C'est exactement ce que je voulais dire. Je savais que mysqlcela ne nous laissera pas seuls sur une question aussi importante;)
Googlebot
1
Heureux que cela aiderait. Ne vous inquiétez pas, mysql vous visera toujours sur plusieurs questions importantes.
Alain Collins
@DTest: ou (il peut s'agir) de performances inférieures à l'exécution d'une deuxième requête COUNT (*).
ypercubeᵀᴹ
@ypercube précisément
Derek Downey
3

Utilisez SQL_CALC_FOUND_ROWSdans votre requête SELECT, puis exécutez SELECT FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;
Dipa
la source
1
Cela bénéficierait d'un nettoyage et de quelques détails supplémentaires pour qu'il soit plus utile.
RLF
2

Je sais que c'est une ancienne mais elle n'est plus valide, avec MySQL> = 8.0.17 cf Fonction MySQL Found_Rows () Donc nous devons encore émettre les deux requêtes ie. ajoutez-en un avec COUNT(), malheureusement.

Fred
la source