MySQL - Совместное использование функций COUNT и LIMIT - PullRequest
3 голосов
/ 13 ноября 2011

У меня есть таблица «Лаборатории» с 14 записями.

Запрос SELECT COUNT(Labs.sid) FROM Labs LIMIT 0, 18446744073709551615 возвращает "14".

Однако запрос SELECT COUNT(Labs.sid) FROM Labs LIMIT 1, 18446744073709551615 возвращает «0» (а не 13, как я ожидал). Фактически, «0» все еще возвращается, когда я устанавливаю значение смещения строки LIMIT 2, 3, 4 и т. Д.

Почему это? Есть ли способ определить количество строк после указанного смещения, используя только mysql?

FWIW Я использую MySQL 5.5.9 и ядро ​​базы данных InnoDB.

Ответы [ 2 ]

4 голосов
/ 13 ноября 2011

Ограничение применяется ПОСЛЕ ТОГО, КАК выполняется счет.

Попробуйте вместо этого:

SELECT COUNT(sid) FROM
(
    SELECT sid FROM Labs LIMIT 2, 18446744073709551615
) T1

Обратите внимание, что это плохая идея - использовать LIMIT без ORDER BY, потому что вы не можете гарантировать, что порядок будет согласованным, поэтому теоретически каждый раз можно выбирать разные строки (что имеет значение, если sid может быть NULL) .

2 голосов
/ 13 ноября 2011

Почему бы вам просто не вычесть смещение из COUNT(*)?

SELECT COUNT(Labs.sid) - 1 FROM ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...