2014-01-14 42 views
0
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 

這是簡單的連接查詢 文章表結構加入兩個MySQL表,並從類別導致

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

您在列表頂部列出的查詢是各種破碎的。您選擇N和A,然後使用藝術。和arg。 ?? –

+0

哦這是輸入錯誤 –

+0

實際上,你的日期當然是存儲在DATE數據類型下的,對吧? – Strawberry

回答

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。讓我知道如果是這樣,我會更新我的答案。

+0

我覺得有更多的子查詢比你絕對需要嗎?! – Strawberry

+0

是的,我已經啓用專欄:) –

+0

@Ed Gibbs其實我想爲每個參數選擇一篇文章(參數下的最後一篇文章) –

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)