Selectarea și de numărare rânduri o singură cerere

Pornind de la versiunea 4.0 a MySQL a apărut oportunitate destul de convenabil pentru a contoriza numărul de toate intrările eligibile în cererea atunci când numărul de intrări este LIMIT'om limitată. Atunci când se lucrează cu căutarea în baza de date, precum și în probele de tabele cu un număr mare de înregistrări de o astfel de funcționalitate este o necesitate.

Sintaxa. Interogarea SELECT pe lista de coloane trebuie să specificați SQL_CALC_FOUND_ROWS opțiune. Aici este începutul descrierii structurii de sintaxă SELECT.

SELECT
[ALL | DISTINCT | DISTINCTROW]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ... ...

Astfel, efectuarea SELECT cerere SQL_CALC_FOUND_ROWS SGBD contoriza numărul total de rânduri care corespund condiției de interogare și stoca acest număr în memorie. În mod firesc, face cerere sens SELECT SQL_CALC_FOUND_ROWS numai în cazul în care (limita). Imediat după cererea de probă pentru a obține numărul de înregistrări trebuie să efectueze o altă interogare SELECT: SELECT FOUND_ROWS ();. Ca rezultat, MySQL întoarce o linie cu un singur domeniu, și în care este stocat numărul de rânduri.

Exemplul ei înșiși interogări:

> SELECT SQL_CALC_FOUND_ROWS * FROM WHERE tbl_name număr> 100 LIMIT 10;
> SELECT FOUND_ROWS ();

Prima interogare se va întoarce (aduce) 10 rânduri de tbl_name de masă, pentru care numărul de condiție> 100. comanda SELECT Al doilea apel returnează numărul de rânduri a revenit la prima echipă a SELECT, dacă ar fi fost scris fără limita expres. Deși folosind echipa SQL_CALC_FOUND_ROWS SELECT, MySQL trebuie să contorizați toate rândurile din setul de rezultate, acest proces este încă mai rapid decât fără limită, pentru că nu au nevoie pentru a trimite rezultatul la client.

EXEMPLUL cere de la PHP:

$ Rezultat = mysql_query ( «SELECT SQL_CALC_FOUND_ROWS * DE LA LIMITA 0 tabelul 1, 10“, $ link-ul);
în timp ce ($ row = mysql_fetch_assoc ($ rezultat))
var_dump ($ row);
>

$ Rezultat = mysql_query ( «SELECT FOUND_ROWS ()», $ link);
$ Num_rows = mysql_result ($ rezultat, 0);
echo «$ NUM_ROWS Rânduri \ n»;

Ca rezultat al codului, cu condiția ca $ puncte de legătură la o conexiune deschisă la SGBD, PHP afișează 10 rânduri de tabel Table1. urmat de un număr întreg de linii care corespund cererii (cu excepția LIMIT).

În interogările cu Uniunea SQL_CALC_FOUND_ROWS se pot comporta în două moduri, datorită faptului că limita poate să apară la mai multe locații. Nervurilor pot fi efectuate pentru SELECT interogare individuală, sau pentru întreaga interogare după combinare.

Scopul SQL_CALC_FOUND_ROWS pentru UNION este că aceasta ar trebui să returneze numărul de rânduri care vor fi returnate fără o limită globală. SQL_CALC_FOUND_ROWS condițiile de aplicare cu UNION sunt enumerate mai jos:

  • SQL_CALC_FOUND_ROWS cuvinte cheie trebuie să apară în prima instrucțiune SELECT.
  • Înțeles FOUND_ROWS () vor fi exacte numai dacă cererea UNION ALL. În cazul în care sunt specificate fără UNION ALL, excepție duplicat are loc, iar FOUND_ROWS de valoare () va fi doar aproximative.
  • În cazul în care nu este prezent LIMIT UNION, apoi SQL_CALC_FOUND_ROWS ignorat și returnează numărul de rânduri dintr-o tabelă temporară, care este creat pentru a efectua UNION.