2012-06-07 4 views
0

Я хочу вернуть общее количество строк, возвращаемых при ограничении запроса, чтобы я мог вернуть 10 лучших результатов с ссылкой «Просмотреть все 63» на моем PHP. Наверное, я искал что-то вроде:Возвращаемое количество строк с строками

SELECT `n`.*, COUNT('id') AS `total` 
    FROM `table` 
WHERE (name like '%search%') 
LIMIT 10; 

Но это возвращает только первую строку.

+0

Я добавил 'где', если это не правильно, пожалуйста, не стесняйтесь отката назад. – Ben

+1

Это избыточно, чтобы иметь поле «total rows» с тем же значением, которое повторяется 10 раз. Вместо этого просто отправьте два запроса: «Один для десяти лучших записей» и один для подсчета всех присутствующих записей. – MatBailie

+0

не забывайте поднимать и отмечать его как принятое, если оно работает для вас ... –

ответ

0
SELECT n.*, 
    COUNT(select id from AStotalFROMtable(name like '%search%')) as Total 
    AStotalFROMtable(name like '%search%') LIMIT 10; 

или

Read: MySQL: Get total number of rows when using LIMIT

также попробовать

FOUND_ROWS() - Для ВЫБРАТЬ с пунктом LIMIT, число строк, которые будут возвращены были там нет ОГРАНИЧИТЕЛЬНЫЙ пункт

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE name like '%  
      search%' LIMIT 10;  

SELECT FOUND_ROWS(); 

Первый запрос вернет 10 строк, а второй запрос вернет вам количество строк, которые будут возвращены, если в первом запросе нет предложения LIMIT.

+0

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

+0

Спасибо за ответ, правильно ли это отформатировано? – GeeH

+0

@SpabbyPHP - перейдите по ссылке, предоставленной мной, и прочитайте статью, которая хороша ... поможет вам получить то, что вам легко. –

2
SELECT n.*, total 
FROM table n, (select count(*) total from table t2 where name like '%search%') 
where name like '%search%' 
LIMIT 10 
Смежные вопросы