У меня есть следующая структура базы данных:Сложное базы данных MySQL Query
Sites стол
id | name | other_fields
Резервные копии таблицы
id | site_id | initiated_on(unix timestamp) | size(float) | status
Так Backups
таблицы имеют многие к одному отношения с Sites
стол, подключенный через site_id
И я хотел бы, чтобы вывести данные в следующем формате
name | Latest initiated_on | status of the latest initiated_on row
И у меня есть следующий SQL-запрос
SELECT *, `sites`.`id` as sid, SUM(`backups`.`size`) AS size
FROM (`sites`)
LEFT JOIN `backups` ON `sites`.`id` = `backups`.`site_id`
WHERE `sites`.`id` = '1'
GROUP BY `sites`.`id`
ORDER BY `backups`.`initiated_on` desc
Дело в том, с выше I запроса может достичь того, что я ищу, но единственная проблема заключается в том, что я не получаю последние значения initiated_on
.
Так что если я имел 3 строки в backups
с site_id
= 1
, запрос не выбрать строку с наибольшим значением в initiated_on
. Он просто выбирает любую строку.
Помогите, и
заранее.
Вы не должны писать SELECT *, когда у вас есть GROUP BY - значения, которые вы получите, будут произвольными. В большинстве БД это даже не было бы действительным оператором SQL. (И даже если вы не используете GRUOP BY, SELECT * по-прежнему считается плохой практикой). –
Могу ли я изменить его на 'SELECT sites. *'? – ekhaled
Вы не добавили initial_on в свой SELECT, что, вероятно, поэтому не возвращает его. – CBusBus