LIMIT не работает в сравнении даты и времени

Когда я выполняю подготовленное заявление:

select SQL_CALC_FOUND_ROWS * from entries where ( START_DATE >= ? ) limit 300, 400

где START_DATE имеет тип datetime, Я получаю те же результаты, как если бы я бегу

select SQL_CALC_FOUND_ROWS * from entries where ( START_DATE >= ? ) limit 0, 400

Это означает, что мне показывают 400 результатов, а не 100 в первом запросе! Это почему?

Дополнительная информация:

я использую SQL_CALC_FOUND_ROWS потому что тогда я выполняю запрос select FOUND_ROWS() потому что мне нужно общее количество результатов, чтобы применить функцию разбивки на страницы, чтобы показывать 100 записей на странице. Один запрос, подобный приведенному выше, возвращает около 35 000 результатов (350 страниц).

Это не верно для других запросов в той же таблице. Например, запрос:

select SQL_CALC_FOUND_ROWS * from entries where ( NATIONALITY = ? ) limit 100, 200

успешно возвращает только 100 результатов. Это верно и для других столбцов. Только один из типа datetime Кажется, есть проблема.

0

Решение

Мое мнение — вы смешиваете вещи в своем уме и неправильно поняли идею синтаксиса LIMIT.

Согласно документации:

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

потому что, как заметил @zerkms в комментариях:

LIMIT [OFFSET, ] NUMBER

это означает, что в вашем случае:

limit 300, 400

должен вернуть не более 400 строк после 300 🙂

и если вам интересно, почему

select SQL_CALC_FOUND_ROWS * from entries where ( NATIONALITY = ? ) limit 100, 200

успешно возвращает только 100 результатов.

мое единственное предположение, что ваш результат SQL без какого-либо LIMIT содержит только 200 строк (where ( NATIONALITY = ? ))

Таким образом, нет никакой магии, но от вашего вопроса, как будто вы ожидаете, что LIMIT 100,200 значит для вас «вернуть мне строки между строкой 100 и строкой 200 из результата» — но это не то, как работает LIMIT

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]