2011-06-07 17 views
5

Chcę wybrać każde zdjęcie z tylko jednym komentarzu, a ja chcę tego komentować, aby być jedną z maksymalną IDmysql LEWO dołączyć do wartości max prawo tabeli

Próbowałem następujące:

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. 

Wydaje się działać, ale zastanawiam się, czy istnieje lepszy sposób na zrobienie tego?

Odpowiedz

5

trzeba zastosować max (komentarz ID) na każdym zdjęciu (zakładając komentarz ID jest automatycznego przyrostu i dlatego zawsze najnowsza dodawane do tabeli)

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

Można również zrobić to z połączenie krzyżowe:

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 
+2

top nie jest funkcją MySQL – acorncom

Powiązane problemy