MySQL запрос с порядком и лимитом - PullRequest
2 голосов
/ 23 мая 2011

Предположим, данные как:

table: shapes

id    type
----------------
1     Square
2     Rectangle
3     Square
4     Square

Когда я выполняю следующий запрос:

SELECT `shapes`.* FROM `shapes` WHERE `shapes`.`type` = 'Square' ORDER BY shapes.id DESC LIMIT 1

Я ожидаю получить строку с идентификатором: 4. Неожиданно я получаю строку с идентификатором: 1.

Для действительно странной части: если я выполню тот же запрос с LIMIT 2:

SELECT `shapes`.* FROM `shapes` WHERE `shapes`.`type` = 'Square' ORDER BY shapes.id DESC LIMIT 2

Первая строка в этом наборе 2 на самом деле правильная строка!

И чтобы добавить к странности, у меня есть еще одна копия этой базы данных на том же сервере MySQL, и она возвращает правильную строку для любого предельного запроса, LIMIT 1 или другого.

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

tl; dr: LIMIT 1 возвращает неправильный ряд. LIMIT 2 возвращает правильную строку (для первой). Кажется, для конкретной базы данных.

1 Ответ

0 голосов
/ 24 мая 2011

Проблема возникает из-за того, что вы не используете предел 0, 1. Хотя не предоставлен полный запрос, иногда он отображает неверные результаты. Я предлагаю вам напечатать / выполнить полный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...