Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Странное поведение limit X offset Y в запросах / 8 сообщений из 8, страница 1 из 1
22.06.2017, 12:45
    #39476124
indapublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
Добрый день.

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

Выполняю запрос, который сравнивает две порции таблицы для пагинации:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  *
from
  (
    select distinct id, created_at from aaa order by created_at desc limit 5 offset 0
  ) a,
  (
    select distinct id, created_at from aaa order by created_at desc limit 5 offset 5
  ) b
where a.id = b.id



Логично предположить, что не должно оказаться одинаковых записей в обоих подзапросах?

Однако mysql возвращает три таких записи, а Mariadb возвращает одну.

авторmysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

авторmysql Ver 15.1 Distrib 10.2.6-MariaDB, for osx10.12 (x86_64) using readline 5.1

Почему?
...
Рейтинг: 0 / 0
22.06.2017, 13:06
    #39476139
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
indapublicЛогично предположить, что не должно оказаться одинаковых записей в обоих подзапросах?Ну вообще-то нет. Потому что ключ сортировки не обеспечивает уникальности. А внутри группы записи имеют право на каждый чих меняться местами.
...
Рейтинг: 0 / 0
22.06.2017, 13:26
    #39476153
indapublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
Akina, допустим. Тогда два вопроса:
1. Если я создам таблицу create table as select * from aaa, то с ней такого нет
2. Если записи меняются местами, то как тогда реализуется пагинация? (Данный код генерируется Symfony, кстати говоря)
...
Рейтинг: 0 / 0
22.06.2017, 13:56
    #39476176
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
indapublicкак тогда реализуется пагинация?Пагинация организуется по ключу сортировки, который обеспечивает уникальность. Запрос должен быть, например, таким:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
from
  (
    select distinct id, created_at from aaa order by created_at desc, id limit 5 offset 0
  ) a,
  (
    select distinct id, created_at from aaa order by created_at desc, id limit 5 offset 5
  ) b
where a.id = b.id


indapublicЕсли я создам таблицу create table as select * from aaa, то с ней такого нетВы же сами устроили себе лотерею. Надо ли удивляться, что в лотерее иногда выигрывают, а иногда нет?
...
Рейтинг: 0 / 0
22.06.2017, 14:07
    #39476188
indapublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
Akina, повторюсь, что этот код формируется Symfony
...
Рейтинг: 0 / 0
22.06.2017, 14:33
    #39476207
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
indapublicэтот код формируется SymfonyВот этот самый запрос с двумя подзапросами? не? тогда о чём речь...

Наиболее вероятно, что при пагинации таким манером просто используются кэшированные данные запроса - а там записи выходного набора уже расположены в некоем порядке. Вы же составили запрос, в котором каждый подзапрос будет выполнен независимо, да к тому же подзапросы не кэшатся - надо ли удивляться, что в них различается порядок следования записей?
...
Рейтинг: 0 / 0
22.06.2017, 14:42
    #39476214
indapublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
Akina,
На каждую страницу формируется то, что в подзапросах. И записи дублируются. Нет, не на кэше.
Ваше мнение понял, спасибо
...
Рейтинг: 0 / 0
23.06.2017, 03:03
    #39476510
indapublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение limit X offset Y в запросах
Кстати, если удалить первичный ключ в таблице, дублей не будет
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Странное поведение limit X offset Y в запросах / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]