簡體   English   中英

MYSQL JOIN兩個表限制第二個表的日期結果

[英]MYSQL JOIN two tables limit results from second table by date

我試圖使用MYSQL查詢從兩個表中檢索日期。 我想加入他們的是categories.cat_id=topics.topic_cat 多個條目可能具有相同的topic_cat ,因此我只想選擇最新的,等於MAX(topic_date)

以下查詢顯示了主題中的正確信息,每個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) 我已嘗試以下方法通過最新條目或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         |
----------------------------------------------------------------------------------------------------------------

我希望澄清事情。

試試這個:

###
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);

嘗試改變

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM