О полезном операторе — SQL_CALC_FOUND_ROWS. Это конструкция просто незаменима для организации постраничного вывода каких либо данных. Все время забываю синтаксис, приходится каждый раз искать. Решил записать в блоге, чтобы уж не терять :).
Во всех случаях, когда требуется получить порцию данных, ограниченных с помощью части SQL предложения LIMIT, но при этом нужно знать сколько же всего соответствующих запросу строк данных найдено запросом, может быть использован специальный синтаксис. Вот он :
1 2 3 |
//сам запрос, в который мы добавляем SQL_CALC_FOUND_ROWS сразу после SELECT //{conditions} - какие то условия запроса SELECT SQL_CALC_FOUND_ROWS table1.* FROM table1 WHERE {conditions} LIMIT n; |
1 2 3 |
//этот запрос вернет нам полное число строк (не ограниченное LIMIT) //предыдущего запроса SELECT FOUND_ROWS(); |
В PHP это будет как то так:
1 2 3 4 5 |
$res = mysql_query(" SELECT SQL_CALC_FOUND_ROWS table1.* FROM table1 WHERE {conditions} LIMIT n"); list($rowCount) = mysql_fetch_array(mysql_query("SELECT FOUND_ROWS()")); |
Ещё одна вещь в копилку know-how. Без использования этого метода пришлось бы, к примеру, дважды выполнить SQL запрос. Например, первый раз посчитать число строк, а вторым запросом выбрать нужную порцию (используя секцию LIMIT). Ну, или выполнить только тот запрос, у которого нет секции LIMIT и, используя mysql_data_seek, выбрать нужную порцию данных.