2013-02-03 13 views
5

Próbuję pobrać zdjęcie z tblimage, który odpowiada maxid w tblimage dla każdego użytkownika. Obecnie otrzymuję wszystkie wiadomości z tabeli wiadomości i losowe zdjęcie dla użytkownika, który opublikował wiadomość, chciałbym, aby zdjęcie było najnowszym przesłanym zdjęciem. sposób, w jaki jest teraz napisany, po prostu wyciąga przypadkowe zdjęcie ze stołu. jakieś sugestie?SQL otrzymujący maksymalne pole id w LEWYJ DOŁĄCZ

struktury tabeli są takie:

komunikaty: msgid, wiadomość, user_id, event_id
tblimage: id, fotografia, userid

SELECT messages.*, tblimage.photo, max(tblimage.id) 
     FROM messages LEFT JOIN tblimage ON messages.user_id = tblimage.userid 
     GROUP BY messages.msg_id, messages.user_id 
     ORDER BY messages.msg_id DESC, tblimage.id desc 

Odpowiedz

21

Spróbuj

SELECT messages.*, T2.photo 
FROM messages 
LEFT JOIN (SELECT userid, MAX(id) AS maxid 
      FROM tblimages 
      GROUP BY userid) AS T1 
ON messages.user_id = T1.userid 
LEFT JOIN tblimages AS T2 
ON T2.id = T1.maxid 
ORDER BY messages.msg_id DESC 

, która znajduje max (id) dla każdego użytkownika w tblimages, n używa tego, aby dołączyć każdego użytkownika do najnowszego zdjęcia tego użytkownika.