2014-12-29 4 views
-1

Это мой запрос на данный момент:MySQL Limit вернулся строк и подсчитывает количество не ограниченных строк

SELECT `id`, `type`, `data`, `data_zbid`, `time` 
FROM `notifications` 
WHERE `cid`='$cid' AND `zbid`='$zbid' AND `read`='$read' 
ORDER BY `time` DESC 
LIMIT $start, $amount 

Как вы можете видеть, я ограничив количество результатов, которые возвращаются в $amount, положительное число. Но я также хотел бы знать, сколько уведомлений содержится в таблице, или сколько результатов было бы возвращено, если я не использовал limit. Есть ли способ сделать это в том же запросе?

+0

Я бы предпочел не запускать 2 запроса, так как это будет повторяться при каждом ударе по странице. –

+0

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html – Strawberry

ответ

0

Вы можете написать следующий запрос здесь

SELECT COUNT (*) AS Всего, id, type, data, data_zbid, time ОТ notifications ГДЕ cid = '$ чид' И zbid = '$ zbid' И read = «$ чтения» ORDER BY time DESC LIMIT $ начало, $ сумма

Она возвращает общее количество записей в таблице с т ОБЩИЙ атрибут

+0

Это не работает. –

0

Изменить запрос:

SELECT SQL_CALC_FOUND_ROWS `id`, ... LIMIT ... 

Тогда:

SELECT FOUND_ROWS(); 

http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_found-rows

FOUND_ROWS() функция возвращает количество строк, предыдущий запрос вернулся бы без LIMIT.

Это невозможно сделать в одном результирующем наборе, поскольку каждая строка в результирующем наборе должна иметь одинаковые столбцы. Это может быть выполнено с помощью хранимой процедуры, поскольку они могут возвращать несколько отдельных наборов результатов из одного запроса, но время для выполнения второго запроса, как показано выше, должно быть незначительным.

Смежные вопросы