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

Discussion in 'Веб-разработка, Технические вопросы' started by one, Mar 3, 2019.

  1. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Как так? По любому берутся значения из конца таблицы а надо с начала.

    Что так.
    Code (text):
    1. ORDER BY last_used_time ASC LIMIT 1;
    Что так.
    Code (text):
    1. ORDER BY last_used_time DESC LIMIT 1;
     
  2. doc

    doc Client

    Joined:
    Mar 30, 2012
    Messages:
    6,908
    Likes Received:
    3,237
    last_used_time
    а это поле часом не одинаковое во всех строках?
     
    Lord_Alfred likes this.
  3. ssXXXss

    ssXXXss Client

    Joined:
    Dec 23, 2014
    Messages:
    6,824
    Likes Received:
    1,724
    так попробуй LIMIT 0,1
     
  4. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Частично одинаковое, имеют значение 0.
    Тоже самое.
     
  5. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Ни кто не подскажет решения данного "феномена"?
     
  6. doc

    doc Client

    Joined:
    Mar 30, 2012
    Messages:
    6,908
    Likes Received:
    3,237
    сделай полную выборку по этому запросу и посмотри результат
     
  7. vrska

    vrska Client

    Joined:
    Feb 7, 2010
    Messages:
    236
    Likes Received:
    80
    А тип поля last_used_time случайно не строка?
     
  8. specialist

    specialist Client

    Joined:
    Dec 28, 2018
    Messages:
    279
    Likes Received:
    75
    Демоданные добавьте, без них угадать что там в таблице в этом поле сложновато. Скорее всего сортировка по типу поля не дает результата, т.к. данные не позволяют это сделать.
    Всегда можно добавить авто ID и сортировать по нему.
     
  9. vrska

    vrska Client

    Joined:
    Feb 7, 2010
    Messages:
    236
    Likes Received:
    80
    99,99% что тип поля не timestamp, иначе откуда там 0
     
  10. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Буду сейчас смотреть еще раз. Что то странное с таком запросом:
    Code (text):
    1. WHERE `check_status` = 0 ORDER BY `last_checked_time` ASC LIMIT 1
    Если значения поля равно 0 то как то хаотично или с другого конца берет строку. Раньше все работало как положено.
    Нет, datetime.
    Ну вот было все хорошо и что то поломалось.
    Нет, так не могу. Мне надо брать строку у которой поле last_used_time имеет меньшее значение.
    datetime.
     
    Last edited: Mar 17, 2019
  11. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Мистика какая то честное слово!
     
  12. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Вот более детальнее.
    Запрос:
    Code (text):
    1. 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

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

    TopSerf Client

    Joined:
    Feb 12, 2017
    Messages:
    535
    Likes Received:
    47
    Ни чего не обновлялось? (MySQL или чего там) Если ранее работало, значит что то изменилось...
     
  14. Mikhail B.

    Mikhail B. Moderator

    Joined:
    Dec 23, 2014
    Messages:
    5,341
    Likes Received:
    1,711
    Это не мистика. Мускул крайне капризная БД, намучался я с ней и людей заебал.

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

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Да вроде бы нет. Правда не давно перенес все с 10ки на 2016.
    Мне надо брать из базы самый старый прокси по времени в поле last_checked_time или у которого значение в этом поле 0 (не проверялось ни разу). Прокси со значением 0 берутся в первую очередь. Прокси по кругу проверять.
     
  16. WebBot

    WebBot Client

    Joined:
    Apr 4, 2015
    Messages:
    948
    Likes Received:
    484
    Дак если там все значения 0000-00-00 00:00:00, то как мускулу понять что вы хотите получить именно "первую" строку... если все значения одинаковые, то формально для него нет разницы между "первой" и "последней" ... он сделал выборку всех строк удовлетворяющих условиям WHERE и дальше пытается их сортировать по дате, но они все одинаковые, а по другим признакам вы не сортируете ... в SQL вообще понятие "первая"-"последняя" очень условное, все зависит от запроса. Если же вы считаете "первой строкой" строку которая добавлена в таблицу раньше, то это необходимо явно указать

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

    в этом случае сортировка сначала будет идти по дате, а потом еще по id ... тогда будете гарантировано получать "первую" (добавленную в таблицу раньше) строку из набора даже при одинаковых датах
     
    Last edited: Mar 17, 2019
    one and zortexx like this.
  17. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Да, соглашусь, но блин ведь раньше работала такая конструкция. ) Возможно обновлял и MySQL и в текущей версии стало что то по другому.
    Попробую сейчас.
     
  18. one

    one Client

    Joined:
    Sep 22, 2015
    Messages:
    5,118
    Likes Received:
    852
    Да, сейчас все работает как надо, спасибо!
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)