В MariaDB можете да използвате LIMIT
клауза за намаляване на броя на редовете, върнати от заявка. FOUND_ROWS()
функцията може да се използва в такива заявки за връщане на броя на редовете, които биха били върнати, ако LIMIT
клауза не е включена.
Това може да е удобно, защото ви позволява да получите тази информация, без да се налага да изпълнявате заявката отново.
FOUND_ROWS()
функцията може да се използва и за връщане на броя на редовете, които действително са върнати от ограничената инструкция, ако това е, от което се нуждаете.
Синтаксис
Синтаксисът е така:
FOUND_ROWS()
Не се изискват или приемат аргументи.
За да получите броя на редовете, върнати от израз, включете SQL_CALC_FOUND_ROWS
в изявлението и след това изпълнете FOUND_ROWS()
в отделна заявка (след като изпълните първоначалната заявка).
Пример
Ето пример, за да демонстрирате как работи функцията.
Да предположим, че създаваме таблица като тази:
SELECT SQL_CALC_FOUND_ROWS *
FROM Pets
LIMIT 2;
Резултат:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | +-------+-----------+---------+---------+------------+
Бяха върнати само два реда, както е посочено от LIMIT
клауза.
Нека обаче сега да използваме FOUND_ROWS()
за да видим колко реда биха били върнати, ако не бяхме използвали LIMIT
клауза:
SELECT FOUND_ROWS();
Резултат:
+--------------+ | FOUND_ROWS() | +--------------+ | 8 | +--------------+
Това ни казва, че осем реда биха били върнати, ако не бяхме използвали LIMIT
клауза.
Можем да проверим това, като изпълним заявката без LIMIT
клауза:
SELECT *
FROM Pets;
Резултат:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Също така премахнах SQL_CALC_FOUND_ROWS
от изявлението, тъй като този път не ни трябваше.
Пропускане на SQL_CALC_FOUND_ROWS
Опция
Ако пропуснете SQL_CALC_FOUND_ROWS
опцията, FOUND_ROWS()
функцията връща действителния брой върнати редове. С други думи, връща броя на редовете, върнати след LIMIT
клаузата е приложена.
Ето същия пример без SQL_CALC_FOUND_ROWS
опция:
SELECT *
FROM Pets
LIMIT 2;
Резултат:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | +-------+-----------+---------+---------+------------+
Сега стартирайте FOUND_ROWS()
:
SELECT FOUND_ROWS();
Резултат:
+--------------+ | FOUND_ROWS() | +--------------+ | 2 | +--------------+
Този път FOUND_ROWS()
върна 2
вместо 8
.
Заявки без LIMIT
Клауза
Същата концепция може да се приложи към заявки без LIMIT
клауза.
Пример:
SELECT *
FROM Pets;
Резултат:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Сега стартирайте FOUND_ROWS()
:
SELECT FOUND_ROWS();
Резултат:
+--------------+ | FOUND_ROWS() | +--------------+ | 8 | +--------------+
Други изявления
FOUND_ROWS()
функцията може да се използва и за някои други изрази, като SHOW
, DESCRIBE
и HELP
.