SELECT art.*,arg. FROM rd_articles AS art
LEFT JOIN rd_argument AS arg ON art.cat=arg.id WHERE art.enabled=1 ORDER BY art.id DESC
LIMIT 10
这是简单的连接查询 文章表结构是
ID cat Description Date
1 1 Abc 08-01-2014
2 1 Aaa 10-01-2014
3 2 Abcv 11-01-2014
4 3 Aaa 12-01-2014
5 3 Aaa 14-01-2014
参数表是
ID Name
1 A
2 B
3 C
我想从每只猫中挑选最后一次更新(日期)一项。 怎么样?
答案 0 :(得分:1)
这假设enabled
列位于rd_articles
:
SELECT art.*, arg.*
FROM (
SELECT * FROM rd_articles
INNER JOIN (
SELECT cat, MAX(date) AS maxdate
FROM rd_articles
WHERE enabled = 1
GROUP BY cat
) md ON rd_articles.cat = md.cat AND rd_articles.date = md.maxdate
) art
LEFT JOIN rd_argument AS arg ON art.cat = arg.id
最里面的查询获取每个类别的最大日期,然后将其连接到rd_articles
表,以仅获取具有每篇文章的最新日期的那些rd_articles
行。这将成为cat
别名,然后将其与原始查询中的arguments
表保持联系。如果需要,您可以在最后添加LIMIT 10
;我不知道该怎么做。
请注意,如果某个类别的最新日期存在平局,则每个类别都会有多行。如果出现平局,你需要以某种方式打破平局,例如使用描述或ID。如果是这种情况,请告诉我,我会更新我的答案。
答案 1 :(得分:1)
SELECT ART.*, ARG.*
FROM ARTICLE AS ART
INNER JOIN RD_AGRUEMENT AS ARG
ON ARG.ID = ART.ID
WHERE (ID, DATE) IN
(SELECT ID, MAX(DATE) FROM ARTICLE GROUP BY ID)