Заказал нумерацию страниц с MySQL

ОБНОВЛЕНИЕ: В следующем вопросе я подумал, что когда вы выбираете строки, MySQL создает своего рода индекс строки, а затем предложения LIMIT и OFFSET обрезают этот список по номерам. Проблема в том, что я использую неправильные значения или комбинацию полей для сортировки строк, поскольку они имеют почти одинаковое значение.

Вот моя ошибка, предполагая много "интеллектуальных" форм MySQL;-)

Решение всегда состоит в том, чтобы иметь более надежное поле сортировки в качестве запасного, например, идентификатор, например, ORDER BY priority DESC, id ASC


Это строгий вопрос MySQL. Почему кажется, что предложение LIMIT OFFSET применяется до ORDER BY? или чего мне не хватает?

Вот пример, сначала мы выбираем список строк, упорядоченных по полю с именем priority:

SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC;

Результаты выглядят так:

Затем я хочу выбрать первые 10 строк из этого списка, используя следующий запрос:

SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC LIMIT 10 OFFSET 10;

И у меня есть этот результат:

Почему список не идет от "Грандвалира" до "Сьерра-Невада"?

Проблема этого не в реальном заказе, но некоторые строки никогда не достигаются! как "Вальнорд Ордино-Аркалис". Когда я изменяю значение OFFSET, оно не проходит по всем строкам, и событие повторяет некоторые строки.

Это основной вопрос. Но это вызывает у меня проблемы в конце при использовании "KnpPaginatorBundle (2.5.3)" Symfony. Я думал, что это проблема кода PHP, но запросы MySQL дают мне неожиданные результаты.

Любая помощь или подсказка того, что происходит?

Спасибо!

1 ответ

Решение

Вы не получаете ожидаемых результатов, потому что в ваших данных много строк с одинаковым значением приоритета.

Когда вы используете 'order by' по приоритету, все строки с приоритетом могут располагаться в любом порядке. Там нет гарантии о заказе с тем же значением приоритета. Чтобы устранить связь, вы можете добавить дополнительные поля к вашему заказу по предложению. В зависимости от вашего выбора вы можете включить поле name или id в предложение order by.

Другие вопросы по тегам