MySQL查询多个连接

时间:2013-01-20 05:46:37

标签: mysql left-join max

我有以下查询,它给了我大部分正确的结果。唯一的事情是可以有多张具有相同用户ID的照片,我希望它能够提取最近上传的照片。目前构成它给我一张随机照片。我在tblimage中有一个时间戳字段,但我不知道如何将其合并到此查询中以提取上传的最后一张照片。

SELECT tblimage.*, events.* 
  FROM (events LEFT JOIN tblfollowers
 ON events.id_user = tblfollowers.username) 
     LEFT JOIN tblimage ON events.id_user = tblimage.userid
     WHERE (((tblfollowers.follower_id)='$test') 
     AND (DATE_FORMAT(events.start_date,'%Y-%m-%d')='$today')) 
     OR (((tblfollowers.follower_id)='$test') 
     AND (DATE_FORMAT(events.end_date,'%Y-%m-%d')='$today')) 
     OR (((events.id_user) ='$test') 
     AND (DATE_FORMAT(events.start_date,'%Y-%m-%d')='$today')) 
     OR (((events.id_user) ='$test') 
     AND (DATE_FORMAT(events.end_date,'%Y-%m-%d')='$today')) 
GROUP BY  events.event_id

我认为可以分享更多细节。 tblimage具有以下记录,例如:

userid=25 photo = 1.png timestamp = 12:00 jan 19
userid=25 photo = 2.png timestamp = 1:00 jan 18

我希望它能在1月19日给我一张照片。

2 个答案:

答案 0 :(得分:1)

最后包括

GROUP BY tblimage.userid命令by tblimage.userid DESC

并且您已经包含了Goup,因此您将获得用户的最新图片。

答案 1 :(得分:0)

哇,这太复杂了。

您需要将以下内容放在where子句中:

events.start_date=MAX(events.start_date) OR events.end_date=MAX(events.end_date)

如果该日期有多个记录,则返回> 1,除非该日期是时间戳,否则它不会。