Получить количество строк результата для отдельных операторов SELECT с UNION ALL в MySQL при использовании LIMIT - PullRequest
1 голос
/ 23 августа 2009

Мне нужно получить количество строк для отдельных операторов SELECT в запросе UNION ALL SELECT, который использует LIMIT. Документация по MySQL довольно ясна для получения глобального числа строк для запроса (поместите отдельные SELECT в круглые скобки и поместите SQL_CALC_FOUND_ROWS только в first , а затем получите FOUND_ROWS () как обычно путь). Однако мне также нужно количество строк результата для отдельных операторов SELECT. Запрос, упрощенный:

(SELECT SQL_CALC_FOUND_ROWS `field1`,`field2` FROM `db`.`table1` WHERE `id`>1000)
UNION ALL
(SELECT `field1`,`field2` FROM `db`.`table2` WHERE `id`>1000)
UNION ALL
...
(SELECT `field1`,`field2` FROM `db`.`tableN` WHERE `id`>1000)
LIMIT 0,10

Если SQL_CALC_FOUND_ROWS помещен в каждый оператор SELECT, выдается ошибка «Неправильное использование / размещение« SQL_CALC_FOUND_ROWS »». Гугл это много, почитайте похожие сообщения здесь, безрезультатно. Может быть что-то действительно простое, я просто не могу обдумать это.

1 Ответ

0 голосов
/ 23 августа 2009

Вы получаете эту ошибку, потому что SQL_CALC_FOUND_ROWS может использоваться в запросе для возврата одного числа в FOUND_ROWS ().

Вы можете вернуть счет, сделав это:

SELECT 'table1' AS tablename, COUNT(1) AS rowcount FROM table1 WHERE id > 1
UNION ALL
SELECT 'table2' AS tablename, COUNT(1) AS rowcount FROM table2 WHERE id > 1
...
SELECT 'tableN' AS tablename, COUNT(1) AS rowcount FROM tableN WHERE id > 1

, если это поможет.

Если вы хотите вернуть строки из таблиц с подсчетом, измените их:

SELECT field1, field2, (SELECT COUNT(1) FROM table1 WHERE id > 1000) FROM table1 WHERE id > 1000
UNION ALL
SELECT field1, field2, (SELECT COUNT(1) FROM table2 WHERE id > 1000) FROM table2 WHERE id > 1000
...
SELECT field1, field2, (SELECT COUNT(1) FROM tableN WHERE id > 1000) FROM tableN WHERE id > 1000

Из вашего вопроса не совсем ясно, чего вы пытаетесь достичь.

...