Подтвердить что ты не робот

Получение количества строк с запросом GROUP BY

У меня есть запрос на эффект

SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

Я хочу знать многие общие строки, которые этот запрос будет возвращать без LIMIT (так что я могу показать информацию разбивки на страницы).

Обычно я бы использовал этот запрос:

SELECT COUNT(t3.id) FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id

Однако GROUP BY изменяет значение COUNT, и вместо этого я получаю набор строк, представляющий количество уникальных значений t3.id в каждой группе.

Есть ли способ получить счетчик для общего количества строк, когда я использую GROUP BY? Я бы хотел избежать выполнения всего запроса и просто подсчета количества строк, так как мне нужно только подмножество строк, потому что значения разбиты на страницы. Я использую MySQL 5, но я думаю, что это довольно общий.

4b9b3361

Ответ 1

В MySQL есть хорошее решение.

Добавьте ключевое слово SQL_CALC_FOUND_ROWS сразу после ключевого слова SELECT:

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

После этого запустите другой запрос с помощью функции FOUND_ROWS():

SELECT FOUND_ROWS();

Он должен возвращать количество строк без предложения LIMIT.

Ознакомьтесь с этой страницей для получения дополнительной информации: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

Ответ 2

Являются ли "куча других вещей" совокупными? Я предполагаю, что так как ваш GROUP BY имеет только t3.id. Если это случай, то это должно работать:

SELECT
     COUNT(DISTINCT t3.id)
FROM...

Другим вариантом, конечно же, является:

SELECT
     COUNT(*)
FROM
     (
     <Your query here>
     ) AS SQ

Я не использую MySQL, поэтому я не знаю, будут ли эти запросы работать там или нет.

Ответ 3

Использование подзапросов:

SELECT COUNT(*) FROM    
(
SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
)    
as temp;

поэтому temp содержит количество строк.

Ответ 4

Вы используете MySQL, поэтому вы можете использовать их функцию для выполнения именно этого.

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff 
FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20;

SELECT FOUND_ROWS(); -- for most recent query

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

Ответ 5

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

Лучший способ найти счетчик группы ниже

SELECT 
    sum(1) as counttotal
FROM (
    Your query with group by operator
) as T

Это найдет счет при вычислении группы.