Сегодня наткнулся на интересную опцию в SQL. Возможно многие о ней знают, но я до сегодняшнего дня о ней не знал.
Представим, есть ситуация: нужно сделать запрос с ограничением получения строк(LIMIT), но и в тоже время нужно узнать полное количество строк подходящих под условия запроса. Это ситуация может использоваться, например, в пагинаторе. И так, я всегда в таких случаях делал два запроса, хотя понимал, что это лишняя нагрузка, но ни чего не мог поделать. Но теперь я зная, как делать правильно и покажу вам. Все очень просто:
SELECT SQL_CALC_FOUND_ROWS * FROM `table_name` LIMIT 3; SELECT FOUND_ROWS();
Такой запрос вернет два результата: количество строк с учетом limit и без учета.
В php можно обработать этот запрос так:
$res = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM `table_name` LIMIT 3", $query); $result1 = array(); while ($row = mysql_fetch_assoc($res)) { $result1[] = $row; } $result2 = mysql_query("SELECT FOUND_ROWS()", $query);