MySQL: Что ASC что DESC всеравно берет с конца

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Как так? По любому берутся значения из конца таблицы а надо с начала.

Что так.
Код:
ORDER BY last_used_time ASC LIMIT 1;
Что так.
Код:
ORDER BY last_used_time DESC LIMIT 1;
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 265
Благодарностей
3 431
Баллы
113
last_used_time
а это поле часом не одинаковое во всех строках?
 
  • Спасибо
Реакции: Lord_Alfred

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 013
Благодарностей
1 808
Баллы
113
так попробуй LIMIT 0,1
 

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Ни кто не подскажет решения данного "феномена"?
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 265
Благодарностей
3 431
Баллы
113
сделай полную выборку по этому запросу и посмотри результат
 

specialist

Client
Регистрация
28.12.2018
Сообщения
496
Благодарностей
166
Баллы
43
Ни кто не подскажет решения данного "феномена"?
Демоданные добавьте, без них угадать что там в таблице в этом поле сложновато. Скорее всего сортировка по типу поля не дает результата, т.к. данные не позволяют это сделать.
Всегда можно добавить авто ID и сортировать по нему.
 

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
сделай полную выборку по этому запросу и посмотри результат
Буду сейчас смотреть еще раз. Что то странное с таком запросом:
Код:
WHERE `check_status` = 0 ORDER BY `last_checked_time` ASC LIMIT 1
Если значения поля равно 0 то как то хаотично или с другого конца берет строку. Раньше все работало как положено.
А тип поля last_used_time случайно не строка?
Нет, datetime.
Демоданные добавьте, без них угадать что там в таблице в этом поле сложновато. Скорее всего сортировка по типу поля не дает результата, т.к. данные не позволяют это сделать.
Ну вот было все хорошо и что то поломалось.
Всегда можно добавить авто ID и сортировать по нему.
Нет, так не могу. Мне надо брать строку у которой поле last_used_time имеет меньшее значение.
99,99% что тип поля не timestamp, иначе откуда там 0
datetime.
 
Последнее редактирование:

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Мистика какая то честное слово!
 

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Вот более детальнее.
Запрос:
Код:
SELECT id, proxy_address FROM proxies WHERE check_status = 0 ORDER BY last_checked_time ASC LIMIT 1
Структура таблицы:
upload_2019-3-17_10-14-31.png


Содержимое таблицы:
upload_2019-3-17_10-15-7.png


Результат запроса:

upload_2019-3-17_10-15-47.png


Мистика, друзья, не правда ли?
 

TopSerf

Client
Регистрация
12.02.2017
Сообщения
647
Благодарностей
57
Баллы
28

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
6 371
Благодарностей
2 094
Баллы
113
Мистика, друзья, не правда ли?
Это не мистика. Мускул крайне капризная БД, намучался я с ней и людей заебал.

А зачем берешь именно таким образом. Тебе нужно брать уник?
 

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Ни чего не обновлялось? (MySQL или чего там) Если ранее работало, значит что то изменилось...
Да вроде бы нет. Правда не давно перенес все с 10ки на 2016.
А зачем берешь именно таким образом. Тебе нужно брать уник?
Мне надо брать из базы самый старый прокси по времени в поле last_checked_time или у которого значение в этом поле 0 (не проверялось ни разу). Прокси со значением 0 берутся в первую очередь. Прокси по кругу проверять.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
989
Благодарностей
560
Баллы
93
Дак если там все значения 0000-00-00 00:00:00, то как мускулу понять что вы хотите получить именно "первую" строку... если все значения одинаковые, то формально для него нет разницы между "первой" и "последней" ... он сделал выборку всех строк удовлетворяющих условиям WHERE и дальше пытается их сортировать по дате, но они все одинаковые, а по другим признакам вы не сортируете ... в SQL вообще понятие "первая"-"последняя" очень условное, все зависит от запроса. Если же вы считаете "первой строкой" строку которая добавлена в таблицу раньше, то это необходимо явно указать

Напишите тогда ORDER BY last_checked_time, id LIMIT 1

в этом случае сортировка сначала будет идти по дате, а потом еще по id ... тогда будете гарантировано получать "первую" (добавленную в таблицу раньше) строку из набора даже при одинаковых датах
 
Последнее редактирование:
  • Спасибо
Реакции: one и zortexx

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Дак если там все значения 0000-00-00 00:00:00, то как мускулу понять что вы хотите получить именно "первую" строку... если все значения одинаковые, то для него нет разницы между первой и последней ... он сделал выборку всех строк по условиям и дальше пытается их сортировать по дате, но они все одинаковые, а по другим признакам вы не сортируете ... в sql вообще понятие первая-последняя очень условное, все зависит от запроса.
Да, соглашусь, но блин ведь раньше работала такая конструкция. ) Возможно обновлял и MySQL и в текущей версии стало что то по другому.
Напишите тогда ORDER BY last_checked_time, id LIMIT 1
Попробую сейчас.
 

one

Client
Регистрация
22.09.2015
Сообщения
5 225
Благодарностей
876
Баллы
113
Да, сейчас все работает как надо, спасибо!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)