Избор и броеше една заявка

Започвайки от версия 4.0 на MySQL се появи доста удобна възможност да се преброят на всички имащи право на участие по искане когато броят на записите е ограничен LIMIT'om. Когато се работи с търсенето в базата данни, както и в проби от таблиците с голям брой записи на тази функционалност е задължително.

Синтаксис. Избор на заявката към списъка на колони трябва да укажете SQL_CALC_FOUND_ROWS опция. Тук е началото на описанието на 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, ... ...

По този начин, изпълнявайки SELECT заявка SQL_CALC_FOUND_ROWS СУБД брои общият брой на редовете, които отговарят на условието за заявка и съхраняване на този номер в паметта. Естествено, това прави искане смисъл SELECT SQL_CALC_FOUND_ROWS само когато лимита (лимит). Веднага след искането за пробата да се получи броят на записите е необходимо да извършите друго SELECT-заявка: SELECT FOUND_ROWS ();. В резултат на това, MySQL върне един ред с едно поле, и в който се съхранява броя на редовете.

Пример самите заявки:

> SELECT SQL_CALC_FOUND_ROWS * ОТ КОИТО tbl_name брой> 100 ГРАНИЦА 10;
> SELECT FOUND_ROWS ();

Първата заявка ще се върне (въвеждат) 10 реда на tbl_name на масата, за които броят на състоянието> 100. SELECT команда Втората покана връща броя на редовете се връща в първия отбор на SELECT, ако то е било написано без изричното ограничение. Въпреки че използването на SELECT отбор SQL_CALC_FOUND_ROWS, MySQL трябва да брои всички редове в комплекта резултат, този процес е все още по-бързо, отколкото без лимит, тъй като те не трябва да изпратите резултата на клиента.

Пример изисква от PHP:

$ Резултат = mysql_query ( "SELECT * FROM SQL_CALC_FOUND_ROWS таблица 1 LIMIT 0, 10 ', $ връзка);
докато ($ ред = mysql_fetch_assoc ($ резултат))
var_dump ($ ред);
>

$ Резултат = mysql_query ( "SELECT FOUND_ROWS ()», $ връзка);
$ NUM_ROWS = mysql_result ($ резултат 0);
ехо «$ NUM_ROWS реда \ н»;

В резултат на кода с уговорката, че $ връзка води до отворена връзка към СУБД, PHP показва 10 реда от таблица 1 таблица. последвано от число на съответните линии на искането (без ограничение).

В търсене с по СЪЮЗ SQL_CALC_FOUND_ROWS могат да се държат по два начина дължи на факта, че лимитът може да се появи в няколко места. Набраздените линии могат да бъдат проведени за индивидуално SELECT-заявка, или за цялата заявка след комбиниране.

SQL_CALC_FOUND_ROWS гол за UNION е, че тя трябва да се върне на броя на редовете, които ще бъдат върнати без глобален LIMIT. условия SQL_CALC_FOUND_ROWS кандидатстване с UNION, са изброени по-долу:

  • SQL_CALC_FOUND_ROWS дума трябва да се появи през първата SELECT изявлението.
  • Значение FOUND_ROWS () ще бъде точна, само ако СЪЮЗ за кандидатстване ALL. Ако е посочено, без UNION ALL, дубликат изключение се случи, и FOUND_ROWS на стойност () само ще се сближат.
  • Ако не присъства LIMIT СЪЮЗ, тогава SQL_CALC_FOUND_ROWS игнорира и връща броя на редовете в временна таблица, която е създадена за извършване на Съюза.