MySQL COUNT с group_concat

Мне нужно запросить несколько таблиц в базе данных, чтобы создать список элементов, а затем, чтобы отобразить список на страницах, мне нужно получить общее количество строк, используя COUNT.

Мой SQL выглядит следующим образом:

SELECT
    j.jid,
    j.reference,
    group_concat(COALESCE(p.canview, u.canview)) AS canview
FROM jobs j
LEFT JOIN usergroups u ON (u.gid IN (1,2,3))
LEFT JOIN permissions p ON (p.jid = j.jid) AND (p.gid = u.gid)
GROUP BY j.jid
HAVING FIND_IN_SET('1', canview) > 0
LIMIT 0, 5

По сути, все, что я хочу знать, это возможно ли, изменив приведенный выше запрос, чтобы я мог получить общее количество строк, возвращаемых до LIMIT. Я пытался добавить COUNT(j,jid), но это возвращает 3 (я думаю, это количество строк, объединенных с group_concat) вместо желаемых 9 строк, которые в настоящее время находятся в базе данных jobs, для которых canview установлено значение 1.

Заранее благодарю за любую помощь.


person user3260082    schedule 02.02.2014    source источник


Ответы (1)


Запустите запрос.

Затем запустите второй запрос для подсчета строк:

select found_rows()

Это задокументировано здесь.

РЕДАКТИРОВАТЬ:

Чтобы получить итог без строк, используйте ключевое слово SQL_CALC_FOUND_ROWS вместо select:

select SQL_CALC_FOUND_ROWS . . .

Тогда found_rows() вернет итог без limit.

person Gordon Linoff    schedule 02.02.2014
comment
Я попробовал это, и это сработало без LIMIT, но я искал общее количество строк, которые вернул бы этот запрос, если бы я не использовал LIMIT. - person user3260082; 02.02.2014
comment
Я попробовал ключевое слово SQL_CALC_FOUND_ROWS, но после небольшого поиска в Google оказалось, что оно намного медленнее, чем простое COUNT(*). Есть ли способ получить тот же результат, используя мой запрос и COUNT(*)? - person user3260082; 04.02.2014
comment
@user3260082 . . . Вам придется запустить запрос дважды. Один с count(*) для подсчета, а другой для получения самих строк. - person Gordon Linoff; 04.02.2014
comment
Итак, мне удалось заставить его работать, используя выбор подзапроса и подсчет результатов. Спасибо за вашу помощь. - person user3260082; 06.02.2014