2013-09-29 63 views
0

我有两张表:一张表包含由成员提交的诗。另一个是会员的桌子。两个表都包含成员的ID(MID和SubMID)。我想显示已经更新的最后15首诗。但是,我只想为任何作者显示一项作品。mySQL加入表没有重复

这工作,但它如果作者更新了几个作品,然后它们会显示很多次:

SELECT * FROM submits, members 
WHERE submits.SubMID = members.MID AND submits.sub_approved = 'T' 
ORDER BY submits.sub_Last_Update DESC LIMIT 15 

你可以看到,查询这里的在右边的滚动字幕的结果: http://www.Prose-n-Poetry.com

问题是,一位作者可以通过更新一些诗来接管选框。

回答

1
SELECT * 
FROM members m 
JOIN (SELECT s.* 
     FROM submits s 
     JOIN (SELECT SubMID, MAX(sub_Last_Update) lastUD 
      FROM submits 
      WHERE approved = 'T' 
      GROUP BY SubMID) l 
     ON s.SubMID = l.SubMID AND s.sub_Last_Update = l.lastUD) s 
ON m.MID = s.SubMID 
ORDER BY s.sub_Last_Update DESC 
LIMIT 15 
+0

这给了我代码给了我错误。什么是lastUD?我不明白单个字母“s”,“m”,“l” – user2827532

+0

单个字母是表名称的别名。它们在每个表名后面声明。然后可以在整个查询中使用该字母而不是整个表名。 'LastUD'本身是MAX(sub_Last_Update)函数的别名:它比使用参数重复函数更容易输入。 –

+0

谢谢,修复了它。发生错误的原因是没有“批准”字段,我需要将其更正为“sub_approved” – user2827532

0

编辑:正如@Barmar所评论的,这不会给出每个用户最近提交的列表。会员

$query = " 
SELECT 
* 

FROM 
submits, members 

WHERE 
submits.SubMID = members.MID 

AND 
submits.sub_approved = 'T' 

GROUP BY 
submits.SubMID 

ORDER BY 
submits.sub_Last_Update DESC 

LIMIT 15 
"; 
+1

由于GROUP BY的ORDER BY之前完成

尝试分组,这将让每人一份意见书,但不一定是最新的一个。 – Barmar

+0

这并没有给出最近15次更新。我通过使用submits.date而不是submits.sub_Last_Update来更改代码,以显示最近15个新诗,而不是最后15个已更改(更新)的新诗。 我试过使用DISTINCT来限制它到一个作者没有运气 – user2827532