获取符合特定条件的类别中的最后一项

时间:2010-04-26 17:42:54

标签: sql mysql join

假设我有一个包含两个表的数据库:categoriesarticles。每篇文章都属于一个类别。

现在,我们假设我想获取符合特定条件的每个类别的最新文章(阅读:文章的内容)。如果不是那个额外的标准,我可以添加一个名为last_article_id的列或类似于categories表的列 - 即使它没有被正确标准化。

我怎么能这样做?我假设使用GROUP BYHAVING

3 个答案:

答案 0 :(得分:1)

尝试:

   SELECT * 
     FROM categories AS c
LEFT JOIN (SELECT * FROM articles ORDER BY id DESC) AS a
       ON c.id = a.id_category
      AND /criterias about joining/
    WHERE /more criterias/
 GROUP BY c.id

答案 1 :(得分:0)

如果您向我们提供了表格模式,我们可能会更具体一些,但您可以尝试类似(12.2.9.6. EXISTS and NOT EXISTSSELECT Syntax for LIMIT

SELECT  *
FROM    articles a
WHERE   EXISTS  (   
                    SELECT  1 
                    FROM    articles 
                    where   category_id = a.category_id
                    AND     <YourCriteria Here>
                    ORDER BY    <Order Required : ID DESC, LastDate DESC or something?
                    LIMIT 1
                )

答案 2 :(得分:0)

假设文章表中的id代表总是增加的数字,这应该有效。使用id在语义上不正确恕我直言,你应该使用时间/日期夯实字段(如果有的话)。

SELECT * FROM articles WHERE article_id IN
  (
    SELECT 
      MAX(article_id) 
    FROM
      articles 
    WHERE [your filters here]
    GROUP BY 
      category_id
  )