加入两个MySQL表并从类别中获取结果

时间:2014-01-14 19:40:10

标签: mysql

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

我想从每只猫中挑选最后一次更新(日期)一项。 怎么样?

2 个答案:

答案 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)