Я полностью озадачен тем, что кажется простой проблемой. Может быть, я просто сбит с толку, потому что слишком долго думал / гуглял / искал вокруг.
Рассмотрим следующую таблицу:
log_id (auto increment primary key)
domain_id (foreign key to "domains" table)
type (enum('notice','warning'))
message (varchar)
Выполнение следующего выбора:
SELECT *
FROM logs
WHERE domain_id = 4
Дайте мне, скажем, 2 журнала типа «извещение» и 3 типа «предупреждение».
Как бы я выбрал только журналы с наибольшим идентификатором их type
? Эффективно давая мне последний журнал за domain_id
и type
.
Просто описывая это, я чувствую себя глупо, но я не могу понять, что это правильно ..
Спасибо за вашу помощь.
Chris
Edit:
Для дальнейшего использования, если вы хотите выбрать все записи из первой таблицы и показать последнюю запись объединенной таблицы (в этом случае выберите все домены и их последнюю запись в журнале (если доступно)), просто оберните выборку в доменах. стол вокруг него:
SELECT
domains.*,
logs.*
FROM
domains
LEFT JOIN (
SELECT
l.*
FROM
logs l
INNER JOIN (
SELECT
MAX(log_id) as maxid
FROM
logs
GROUP BY
domain_id
type
) l3 ON l.log_id = l3.maxid
) l2 USING (domain_id)