За последние 24 часа нас посетили 22912 программистов и 1260 роботов. Сейчас ищут 754 программиста ...

не работает order by id desc

Тема в разделе "MySQL", создана пользователем shiyri, 5 дек 2021.

  1. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Здравствуйте, прошу помочь, не работает order by, меняю desc на asc результат одинаковый, хотелось бы, что б бралась последняя строка из таблицы.
    Код (Text):
    1. select
    2.  
    3.           au.id as id, au.name_model, au.gos_numer, ft.fio, th.teh, os.sago, sk.skzi, rem.data_remonta1
    4.  
    5.           from name_auto as au left join fio_table as ft on au.id_driver=ft.propusk
    6.  
    7. left join
    8.  
    9.          (SELECT DATE_FORMAT(teh, '%d.%m.%Y') as teh,id_auto from teh where teh > now() - INTERVAL 1
    10. day ORDER BY teh.id desc) th on th.id_auto = au.id
    11.  
    12. left join
    13.  
    14.           (SELECT DATE_FORMAT(sago, '%d.%m.%Y') as sago, os.id_auto from os_sk as os where os.sago > now() - INTERVAL 1 day ORDER BY os.id desc) os on os.id_auto = au.id
    15.  
    16. left join
    17.  
    18.          (SELECT DATE_FORMAT(skzi, '%d.%m.%Y') as skzi, id_auto from skzi where skzi > now() - INTERVAL 1 day ORDER BY skzi.id desc) sk on sk.id_auto = au.id
    19.  
    20. left join
    21.  
    22.         (SELECT DATE_FORMAT(data_remonta1, '%d.%m.%Y') as data_remonta1, id_auto from remont ORDER BY remont.id DESC) rem on rem.id_auto = au.id
    23.  
    24. where
    25.  
    26.          au.udal is null GROUP BY au.name_model
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Из какой таблицы конкретно? Если в auto, то и сортировку в последней выборке
     
  3. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Код (Text):
    1. (SELECT DATE_FORMAT(teh, '%d.%m.%Y') as teh,id_auto from teh where teh > now() - INTERVAL 1
    2. day ORDER BY teh.id desc)
    вот в этих селектах
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    жестко вы так....
    teh - это поле с датой teh в таблице teh? а потом еще и псевдонимите.... удивлен что MySQL не ругается

    отдельно этот запрос работает? Что выдает - что нужно?
     
  5. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Да отдельно этот селект работает
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    а что вы в целом хотите?
    есть ощущение что можно и нужно сделать проще
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Есть ли разница, как отсортированы таблицы, участвующие в операции join?
    @shiyri, сортировку сделайте не для подзапроса.
    То есть, teh.id надо включить в результат выборки подзапроса и сортировать всю выборку по th.`какой-псевдоним-для-id`.
    --- Добавлено ---
    Но из-за группировки придётся, вероятно, сортировать по дате, а не по id записи в таблице teh.
     
  8. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Есть таблица с номерами и марками машин, остальные таблицы ссылаются на поле ид первой(дата тех осмотра, осаго, скзи и тп), хочу для итоговой таблицы сделать выборку:
    1. вывести все значения из первой таблицы
    2. к ним добавить значения последних (по ид) актуальных данных из других таблиц.
    --- Добавлено ---
    1.Из селектов в скобках хочу брать только самое новое поле
    2. Для всего запроса сортировка делается, только она не имеет смысла.


    Код (Text):
    1. SELECT DATE_FORMAT(teh, '%d.%m.%Y') as teh, teh.id, id_auto from teh where teh > now() - INTERVAL 1 day Order by teh.id desc
    без джойнов все работает
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    на каком-нибудь SQLFiddle запость - структуру таблиц, данных внеси пару значений в таблицы, этот запрос
    и ссылку сюда кинь .... больше шансов помощи будет...
    а то - оно нам надо у себя все это готовить? А в голове большие запросы без наглядности прокручивать - то еще занятие
     
  10. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    ничего не понимаю теперь на SQLFiddle все работает корректно....
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    1. попробуйте побольше данных внести, может повезло просто
    2. сравните версии MySQL
     
  12. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    у меня
    10. 4.8-MariaDB - mariadb.org binary distribution
    у SQLFiddle
    mysql 5,6
    со всеми данными в SQLFiddle все работает
     
  13. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    На всякий случай повторю: порядок сортировки в таблице, участвующей в join - не бессмысленен, если нет дополнительных ограничений (например, на количество выдаваемых подзапросом строк, содержащих требуемый ключ)
    С группировкой - тоже не всё так просто, как кажется.
    При "строгой" настройке СУБД в группировке должны быть перечислены все выбираемые поля.
    Иначе нет гарантии, что значение поля, не входящего в перечень "группируемых" будет показано именно из той записи (строки), которую ожидаете.
     
  14. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    если б она была - у него б ошибку выплюнул - а не результат другой давало

    мыль была еще, order by нафиг..... но искать MAX() даты... имхо попроще должно получится
     
  15. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Я не про наличие или отсутствие настройки, а про то, что значения полей, в группировке не участвующих берутся "от фонаря".
    Чтобы значение было однозначным - надо сделать так, чтобы и сопоставление выполнялось так-же однозначно.
    Может и не проще, но правильнее.
    @shiyri, из подзапроса по teh должно быть выбрано только по одной записи, соответствующей идентификатору авто в таблице auto.
    Сортировка по id тут - не помощник...