sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB FOUND_ROWS() Förklarad

I MariaDB kan du använda LIMIT sats för att minska antalet rader som returneras av en fråga. FOUND_ROWS() funktion kan användas i sådana frågor för att returnera antalet rader som skulle ha returnerats om LIMIT klausul inte inkluderats.

Detta kan vara praktiskt eftersom det låter dig få den här informationen utan att behöva köra frågan igen.

FOUND_ROWS() Funktionen kan också användas för att returnera antalet rader som faktiskt returnerades av den begränsade satsen, om det är vad du behöver.

Syntax

Syntaxen ser ut så här:

FOUND_ROWS()

Inga argument krävs eller accepteras.

För att få antalet rader som returneras av en sats, inkludera SQL_CALC_FOUND_ROWS i satsen och kör sedan FOUND_ROWS() i en separat fråga (efter att du har kört den första frågan).

Exempel

Här är ett exempel för att visa hur funktionen fungerar.

Anta att vi skapar en tabell så här:

SELECT SQL_CALC_FOUND_ROWS * 
FROM Pets 
LIMIT 2;

Resultat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
+-------+-----------+---------+---------+------------+

Endast två rader returnerades, som specificerats av LIMIT klausul.

Men låt oss nu använda FOUND_ROWS() för att se hur många rader som skulle ha returnerats om vi inte hade använt LIMIT klausul:

SELECT FOUND_ROWS();

Resultat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            8 |
+--------------+

Det säger oss att åtta rader skulle ha returnerats om vi inte hade använt LIMIT klausul.

Vi kan verifiera detta genom att köra frågan utan LIMIT klausul:

SELECT * 
FROM Pets;

Resultat:

+-------+-----------+---------+---------+------------+
| 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       |
+-------+-----------+---------+---------+------------+

Jag tog också bort SQL_CALC_FOUND_ROWS från uttalandet, eftersom vi inte behövde det den här gången.

Utesluter SQL_CALC_FOUND_ROWS Alternativ

Om du utelämnar SQL_CALC_FOUND_ROWS alternativet, FOUND_ROWS() funktionen returnerar faktisk antal returnerade rader. Med andra ord, det returnerar antalet rader som returneras efter LIMIT klausul har tillämpats.

Här är samma exempel utan SQL_CALC_FOUND_ROWS alternativ:

SELECT * 
FROM Pets 
LIMIT 2;

Resultat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
+-------+-----------+---------+---------+------------+

Kör nu FOUND_ROWS() :

SELECT FOUND_ROWS();

Resultat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            2 |
+--------------+

Den här gången FOUND_ROWS() returnerade 2 istället för 8 .

Frågor utan en LIMIT Klausul

Samma koncept kan tillämpas på frågor utan en LIMIT klausul.

Exempel:

SELECT * 
FROM Pets;

Resultat:

+-------+-----------+---------+---------+------------+
| 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       |
+-------+-----------+---------+---------+------------+

Kör nu FOUND_ROWS() :

SELECT FOUND_ROWS();

Resultat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            8 |
+--------------+

Övriga uttalanden

FOUND_ROWS() funktion kan också användas på vissa andra satser, såsom SHOW , DESCRIBE och HELP .


  1. Unik begränsning med villkor i MYSQL

  2. Tabellfiltrering i IRI Workbench

  3. Ms-Access VBA Class Object Arrays

  4. Distribuera en Hybrid Cloud MySQL-databas med ClusterControl