#mysql #sql
#mysql #sql
Вопрос:
Я хочу выбрать каждую фотографию только с одним комментарием, и я хочу, чтобы этот комментарий был с максимальным идентификатором
Я попробовал следующее:
SELECT
p.id,
p.title,
MAX(c.id),
c.comment
FROM tb_photos AS p
LEFT JOIN tb_comments AS c ON p.id=c.photos_id.
Кажется, это работает, но мне интересно, есть ли лучший способ сделать это?
Ответ №1:
вам нужно применить max (идентификатор комментария) к каждой фотографии (при условии, что идентификатор комментария автоматически увеличивается и, следовательно, всегда является самым последним, добавленным в таблицу)
select
p.*,
tbc.Comment
from
tb_photos p
LEFT JOIN ( select c.photos_id,
max( c.id ) lastCommentPerPhoto
from
tb_comments c
group by
c.photos_id
order by
c.Photos_id ) LastPhotoComment
on p.id = LastPhotoComment.photos_id
LEFT JOIN tb_comments tbc
on LastPhotoComment.LastCommentPerPhoto = tbc.id
Ответ №2:
Вы также можете сделать это с помощью перекрестного соединения:
select
p.*,
LastPhotoComment.Comment
from
tb_photos p
cross join ( select top 1 c.Comment
from
tb_comments c
where
c.photos_id = p.id
order by
c.id DESC ) LastPhotoComment