MySQL ограничить запрос не может получить все данные

0

У меня есть таблица MySQL MyISAM, структура которой приведена ниже.

CREATE TABLE 'VIEW_LOG_TRIGGER_TEMP' (
 'ID' mediumint(9) NOT NULL AUTO_INCREMENT,
 'VIEWER' int(10) unsigned NOT NULL DEFAULT '0',
 'VIEWED' int(10) unsigned NOT NULL DEFAULT '0',
 'DATE' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
 'SEEN' char(1) NOT NULL,
 PRIMARY KEY ('ID'),
 UNIQUE KEY 'VIEWED' ('VIEWED','VIEWER'),
 KEY 'VIEWER' ('VIEWER'),
 KEY 'DATE' ('DATE')
) ENGINE=MyISAM

Изображение 174551

Содержимое таблицы выглядит следующим образом:

Изображение 174551

Я хочу получить записи между двумя датами, и в каждом наборе результатов я хочу две записи. Выполнение следующих запросов, набор результатов которых показан на прилагаемом изображении:

SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >=  '2018-02-11 00:00:00' AND DATE <  '2018-02-12 00:00:00' LIMIT 2;

Изображение 174551

SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >=  '2018-02-11 00:00:00' AND DATE <  '2018-02-12 00:00:00' LIMIT 2,2;

Изображение 174551

SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >=  '2018-02-11 00:00:00' AND DATE <  '2018-02-12 00:00:00' LIMIT 4,2;

Изображение 174551

Поскольку мы видим, что запись с ID 3 не извлекается. Ожидаемый результат - все записи из массива должны быть извлечены. Если я выполняю те же запросы с условием Order by по DATE как ORDER BY DATE ASC, я получаю требуемый результат. В каждой выборке мы получаем новый результирующий набор, на котором применяется порядок?

  • 0
    Обратите внимание, что LIMIT без ORDER BY является довольно бессмысленным понятием
Теги:
limit
sql-order-by

2 ответа

2

Проблема заключается в "LIMIT 4,2" и "LIMIT 2,2", это означает, что вы не хотите, чтобы все результаты

Чтобы объяснить больше:

LIMIT 4,2 означает, что вам нужно всего 2 результата, начиная с 4-го

И лучшее объяснение оптимизации LIMIT и ORDER с оптимизацией лимита сайта MYSQL

  • 0
    Моя точка зрения состоит в том, что в трех запросах с разными ограничениями он должен получить все результаты с идентификатора 1 до идентификатора 5, что я не могу сделать.
  • 0
    Нет из-за вашего лимита
1

Вы использовали ranged Query for Date, а ваш ID - первичный ключ. Вы получите результат, основанный на увеличении даты и времени.

Таким образом, заказ будет в указанном порядке, если не используется ограничение

Id
4
2
1
5
3

Предел 2 для запроса 1 → вы получите ID 4 and 2

Предел 2,2 для запроса 2-> Здесь ваше смещение равно 2, поэтому он пропустит первые два результата, ie.(4 and 2) Е. ie.(4 and 2) и он напечатает ID 1 and 5

Для запроса 3 → Try Limit 4,1 вы получите Id 3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню