FOUND_ROWS() în MySQL

Informații despre server și sesiune MySQL 5.0+ (depreciată din 8.0.17)

Câte rânduri ar fi returnat ultimul SELECT fără LIMIT; depreciată, folosește COUNT(*).

Sintaxă
SELECT SQL_CALC_FOUND_ROWS ... LIMIT n;
SELECT FOUND_ROWS();

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ște COUNT(*).
  • Rulezi altă interogare între SELECT și FOUND_ROWS(). Valoarea se pierde; salveaz-o imediat cu SET @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).