MySQL ORDER BY в сочетании с LIMIT 1 возвращает пустой результат

У нас есть скрипт, который автоматически вставляет значение хеша из пула в статью, если оно удовлетворяет определенным условиям. Это расширение было запрограммировано несколько лет назад и до сих пор работало хорошо.
Теперь это перестало работать, и никто не знает почему. После долгого времени отладки я обнаружил ошибку в операторе SQL.

Сгенерированное заявление выглядело так:

SELECT `hash`
FROM `table`
WHERE `is_used` =0
ORDER BY `uid`
LIMIT 1

Если я просто уберу «ЗАКАЗАТЬ ПО uid«, это работает снова. Я просто хотел бы знать, почему это произошло неожиданно. Хостер сказал, что не было никаких изменений / обновлений, сделанных на системной стороне, и я проверил все связанные файлы, ни один из них не был изменен в течение последнего год.

О системе.
TYPO3 4.5.2
Версия PHP 5.3.8-1 ~ dotdeb.1
MySQL версия 5.1.57

заранее спасибо

Редактировать:
Извините за путаницу.
Под «перестал работать» я имел в виду, что из одного дня в другой в статьи не было вставлено ни одного хэша.
Когда я выполняю инструкцию с ORDER BY, я получаю одну пустую строку в результате.
Столбец uid все еще существует. В системе ничего не изменилось, включая базу данных и ее таблицы.
Я прикрепил изображение со структурой таблицы и справа оба результата запроса (ну, на самом деле это не прикреплено, так как мне нужно больше репутации, чтобы прикрепить его).

Чтобы еще раз уточнить мой вопрос: запрос работал раньше и возвращал хэш. Теперь это работает только тогда, когда я удаляю ORDER BY, и я хотел бы знать, как это может произойти, так как мне любопытно, и это может помочь мне с будущими ошибками.
http://i.stack.imgur.com/Dpip4.png

П.С .: Я редактировал название таблицы, не бойся;)

1

Решение

Глядя на экранную печать, возвращается ли у вас порядок по пункту или нет.

Вы используете LIMIT 1, чтобы вернуть только одну запись. Когда у вас есть пункт order by, вы возвращаете запись с наименьшим идентификатором. Просто так получается, что у него пустое хеш-значение (возможно, в какой-то момент оно было установлено по ошибке).

Я хотел бы просто проверить, что хэш не является пустым в предложении WHERE.

SELECT `hash`
FROM `table`
WHERE `is_used` =0
AND `hash` != ''
ORDER BY `uid`
LIMIT 1
1

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

Я чувствую себя так глупо прямо сейчас. Конечно, это был простой ответ, и система «не перестала работать».
@ Kickstart был прав, в таблице была пустая строка. Я не проверил таблицу правильно.
Когда я открыл его в PhpMyAdmin, по какой-то причине он не был упорядочен по uid (остальные по умолчанию упорядочены по uid).
Я нажал на поле uid и быстро увидел пустую строку.
http://i.stack.imgur.com/Vpco7.png

Спасибо всем за помощь и показ мне, что я не сумасшедший, а просто слепой;)

Я собираюсь взглянуть на скрипт импорта, чтобы игнорировать пустые поля по умолчанию. Никогда не доверяй системе, которую сам не написал ^^

0

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