2010-04-26 29 views
1

假設我有一個包含兩個表的數據庫:categoriesarticles。每篇文章都屬於一個類別。獲取符合特定條件的類別中的最後一項

現在,我們假設我想要獲取符合特定條件的每個類別的最新文章(請閱讀文章)。如果不是那些額外的標準,我可以添加一個名爲last_article_id或類似於categories表的列 - 儘管這樣做不會被正確化。

但我該怎麼做?我假設有一些使用GROUP BYHAVING

+0

有沒有辦法不用的子查詢? – Franz 2010-04-26 18:28:21

+0

查看http://jan.kneschke.de/projects/mysql/groupwise-max/ – goat 2010-04-26 18:37:26

+0

@chris:那看起來很不錯。 – Franz 2010-04-26 18:45:07

回答

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 
+0

這與我的解決方案最接近,只是我在子查詢中也添加了一些過濾器(當他們指的是文章時)。 – Franz 2010-05-07 19:41:21

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 
       ) 
0

假設ID在文章表代表總是越來越多,這應該工作。使用id在語義上不正確恕我直言,你應該實際使用時間/日期夯實領域,如果有的話。

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

得到了一個時間戳。 – Franz 2010-04-26 18:26:57

相關問題