Здравствуйте, прошу помочь, не работает order by, меняю desc на asc результат одинаковый, хотелось бы, что б бралась последняя строка из таблицы. Код (Text): select au.id as id, au.name_model, au.gos_numer, ft.fio, th.teh, os.sago, sk.skzi, rem.data_remonta1 from name_auto as au left join fio_table as ft on au.id_driver=ft.propusk left join (SELECT DATE_FORMAT(teh, '%d.%m.%Y') as teh,id_auto from teh where teh > now() - INTERVAL 1 day ORDER BY teh.id desc) th on th.id_auto = au.id left join (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 left join (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 left join (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 where au.udal is null GROUP BY au.name_model
Код (Text): (SELECT DATE_FORMAT(teh, '%d.%m.%Y') as teh,id_auto from teh where teh > now() - INTERVAL 1 day ORDER BY teh.id desc) вот в этих селектах
жестко вы так.... teh - это поле с датой teh в таблице teh? а потом еще и псевдонимите.... удивлен что MySQL не ругается отдельно этот запрос работает? Что выдает - что нужно?
Есть ли разница, как отсортированы таблицы, участвующие в операции join? @shiyri, сортировку сделайте не для подзапроса. То есть, teh.id надо включить в результат выборки подзапроса и сортировать всю выборку по th.`какой-псевдоним-для-id`. --- Добавлено --- Но из-за группировки придётся, вероятно, сортировать по дате, а не по id записи в таблице teh.
Есть таблица с номерами и марками машин, остальные таблицы ссылаются на поле ид первой(дата тех осмотра, осаго, скзи и тп), хочу для итоговой таблицы сделать выборку: 1. вывести все значения из первой таблицы 2. к ним добавить значения последних (по ид) актуальных данных из других таблиц. --- Добавлено --- 1.Из селектов в скобках хочу брать только самое новое поле 2. Для всего запроса сортировка делается, только она не имеет смысла. Код (Text): 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 без джойнов все работает
на каком-нибудь SQLFiddle запость - структуру таблиц, данных внеси пару значений в таблицы, этот запрос и ссылку сюда кинь .... больше шансов помощи будет... а то - оно нам надо у себя все это готовить? А в голове большие запросы без наглядности прокручивать - то еще занятие
у меня 10. 4.8-MariaDB - mariadb.org binary distribution у SQLFiddle mysql 5,6 со всеми данными в SQLFiddle все работает
На всякий случай повторю: порядок сортировки в таблице, участвующей в join - не бессмысленен, если нет дополнительных ограничений (например, на количество выдаваемых подзапросом строк, содержащих требуемый ключ) С группировкой - тоже не всё так просто, как кажется. При "строгой" настройке СУБД в группировке должны быть перечислены все выбираемые поля. Иначе нет гарантии, что значение поля, не входящего в перечень "группируемых" будет показано именно из той записи (строки), которую ожидаете.
если б она была - у него б ошибку выплюнул - а не результат другой давало мыль была еще, order by нафиг..... но искать MAX() даты... имхо попроще должно получится
Я не про наличие или отсутствие настройки, а про то, что значения полей, в группировке не участвующих берутся "от фонаря". Чтобы значение было однозначным - надо сделать так, чтобы и сопоставление выполнялось так-же однозначно. Может и не проще, но правильнее. @shiyri, из подзапроса по teh должно быть выбрано только по одной записи, соответствующей идентификатору авто в таблице auto. Сортировка по id тут - не помощник...