web-dev-qa-db-fra.com

Est-ce que Mysql a un équivalent à @ ROWCOUNT comme dans mssql?

Comment obtenir des valeurs de nombre de lignes dans MySQL, comme le fait @@ROWCOUNT dans mssql?

38
abs

Pour les SELECT, vous pouvez utiliser la construction FOUND_ROWS ( documentée ici ):

SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SELECT FOUND_ROWS( ) ;

qui renverra le nombre de lignes de la dernière requête SELECT (ou si la première requête comporte une clause LIMIT, elle renvoie le nombre de lignes qu'il y aurait eu sans LIMIT).

Pour UPDATE/DELETE/INSERT, il s’agit du ROW_COUNT construct

INSERT INTO your_table VALUES (1,2,3);
SELECT ROW_COUNT();

qui retournera le nombre de lignes affectées.

57
AndiDog
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name

    -> WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();

En savoir plus à ce sujet ici

7
Lazarus

Le moyen le plus simple serait d'utiliser une variable:

mysql> SELECT @rowcount:=COUNT(*) FROM my_table;
mysql> SELECT @rowcount;

Ou vous pouvez utiliser la construction FOUND_ROWS() après avoir placé un SQL_CALC_FOUND_ROWS dans une instruction SELECT.

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM my_table;
mysql> SELECT FOUND_ROWS();
2
Yada

Il y a un autre moyen:

CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );

Obtenez le nombre de lignes

SELECT COUNT(*) FROM `results`;

Obtenez votre sous-ensemble

SELECT * FROM `results` LIMIT 5,10;

La table temporaire n'existe que dans la session en cours. Je voudrais encore nettoyer après

DROP TEMPORARY TABLE `results`;
0
Rolf