2013-09-30 44 views
6

我想從兩個表中使用MYSQL查詢檢索日期。我想一起加入他們分別是categories.cat_id=topics.topic_cat。多個條目可能有相同的topic_cat,所以我只想選擇最近的,這相當於MAX(topic_date)MYSQL JOIN兩個表限制結果從第二個表到日期

以下查詢顯示來自主題的正確信息,每個topic_cat只有一個結果,而結果具有最近的日期。

SELECT topic_subject, topic_cat, topic_date 
FROM topics 
GROUP BY topic_cat DESC 

多行可能有topic_cat相同的值,但我只想要檢索並加入只有最近,MAX(topic_date),然後加入一個查詢,顯示從類別表以下信息。

SELECT categories.cat_id, categories.cat_name, categories.cat_description, topics.topic_subject, topics.topic_cat, topics.topic_date, topics.topic_by 
FROM categories 
LEFT JOIN topics 
ON categories.cat_id=topics.topic_cat 
GROUP BY cat_id; 

此查詢顯示正確的信息,除了一件事情。它顯示了具有最舊條目的topic_cat,或MIN(topic_date)。我已經嘗試通過以下方式獲得topic_cat的最新條目或MAX(topic_date),但沒有成功。

SELECT categories.cat_id, categories.cat_name, categories.cat_description 
FROM categories 
LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat DESC) AS topics 
ON categories.cat_id=topics.topic_cat 

任何幫助或建議將不勝感激。

好了,所以這裏是樣品的數據和相關聯的期望的結果。

表1 =類別

_______________________________________________________ 
| cat_id | cat_name  | cat_description    | 
------------------------------------------------------- 
| 1  | james  | Some information about james| 
------------------------------------------------------- 
| 2  | myo   | Some information about myo | 
------------------------------------------------------- 
| 3  | brandon  | Some information about brandon | 
------------------------------------------------------- 

表2 =主題

__________________________________________________ 
| topic_subject | topic_cat | topic_date | topic_by | 
---------------------------------------------------------- 
| marcos  | 2   | 2013-9-28 | User 1  | 
--------------------------------------------------------- 
| ferdinand  | 2   | 2013-9-29 | User 2  | 
--------------------------------------------------------- 
| maria luisa | 2   | 2013-9-30 | User 1  | 
--------------------------------------------------------- 
| Isabella  | 1   | 2013-8-24 | User 3  | 
-------------------------------------------------------- 
| Carlos  | 3   | 2012-6-21 | User 2  | 
-------------------------------------------------------- 
| Enrique  | 3   | 2011-4-2 | User 3  | 
--------------------------------------------------------- 

我想查詢返回基於上述表中的以下數據:

_________________________________________________________________________________________________ 
| cat_id | cat_name  | cat_description    | topic_subject | topic_cat | topic_date | topic_by  | 
---------------------------------------------------------------------------------------------------------------- 
| 1  | james  | Some information about james | Isabella  | 1   | 2013-8-24 | User 3   | 
---------------------------------------------------------------------------------------------------------------- 
| 2  | myo   | Some information about myo  | maria luisa | 2   | 2013-9-30 | User 1   | 
---------------------------------------------------------------------------------------------------------------- 
| 3  | brandon  | Some information about brandon | Carlos   | 3   | 2012-6-21 | User 2   | 
---------------------------------------------------------------------------------------------------------------- 

我希望澄清事情。

+1

請提供採樣數據和相關聯的期望的結果。 –

+0

嘗試使用'LIMIT'子句。 –

+0

我可以限制最近的日期嗎? – Jimbob

回答

4

嘗試:

### 
SELECT * FROM categories c 
LEFT JOIN topics t ON c.cat_id = t.topic_cat 
WHERE c.cat_id IN (SELECT t1.cat_id FROM (
    SELECT c.cat_id, c.cat_name, MAX(t.topic_date) AS maxdate FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    GROUP BY c.cat_name 
) as t1 WHERE t1.maxdate = t.topic_date OR t.topic_date IS NULL); 

### without nulls 
SELECT * FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    WHERE c.cat_id IN (SELECT t1.cat_id FROM (
    SELECT c.cat_id, c.cat_name, MAX(t.topic_date) AS maxdate FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    GROUP BY c.cat_name 
) as t1 WHERE t1.maxdate = t.topic_date); 
1

嘗試改變

LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat DESC) AS topics 

到:

LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat 
ORDER BY topic_date DESC 
LIMIT 0,1) AS topics 
相關問題