Ce face FOUND_ROWS()
Folosită împreună cu SQL_CALC_FOUND_ROWS, FOUND_ROWS() spune câte rânduri ar fi găsit interogarea fără LIMIT. Era folosită la paginare: o pagină de rezultate plus numărul total.
Atât SQL_CALC_FOUND_ROWS, cât și FOUND_ROWS() sunt depreciate și afișează avertisment. Varianta recomandată este o a doua interogare cu COUNT(*), fără LIMIT, care de cele mai multe ori este și mai rapidă.
Fără SQL_CALC_FOUND_ROWS, funcția returnează câte rânduri a afișat ultimul SELECT (cu tot cu limită).
Ce returnează
Un număr întreg.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE produse (
id INT AUTO_INCREMENT PRIMARY KEY,
nume VARCHAR(30),
pret INT,
stoc INT
);
INSERT INTO produse (nume, pret, stoc) VALUES
('Laptop', 3500, 4),
('Mouse', 80, 25),
('Birou', 900, 0),
('Scaun', 650, 7),
('Monitor', 1200, 3);
Exemplul 1: Paginare în stil vechi (cu avertismente)
SELECT SQL_CALC_FOUND_ROWS nume, pret
FROM produse
ORDER BY pret
LIMIT 2;
SELECT FOUND_ROWS() AS total;
Rezultat
+-------+------+
| nume | pret |
+-------+------+
| Mouse | 80 |
| Scaun | 650 |
+-------+------+
Warning (Code 1287): SQL_CALC_FOUND_ROWS is deprecated and will be removed in a future release. Consider using two separate queries instead.
+-------+
| total |
+-------+
| 5 |
+-------+
Warning (Code 1287): FOUND_ROWS() is deprecated and will be removed in a future release. Consider using COUNT(*) instead.
Exemplul 2: Varianta recomandată: COUNT(*)
SELECT nume, pret FROM produse ORDER BY pret LIMIT 2;
SELECT COUNT(*) AS total FROM produse;
Rezultat
+-------+------+
| nume | pret |
+-------+------+
| Mouse | 80 |
| Scaun | 650 |
+-------+------+
+-------+
| total |
+-------+
| 5 |
+-------+
Greșeli frecvente
- Scrii cod nou cu
SQL_CALC_FOUND_ROWS. Va fi eliminat; foloseșteCOUNT(*). - Rulezi altă interogare între
SELECTșiFOUND_ROWS(). Valoarea se pierde; salveaz-o imediat cuSET @total = FOUND_ROWS().
Comenzi înrudite
COUNT: Numără rândurile sau valorile dintr-o coloană.LIMIT: Limitează numărul de rânduri returnate. Folosit pentru top-uri și paginare.ROW_COUNT(): Câte rânduri a modificat instrucțiunea anterioară (INSERT, UPDATE, DELETE).