我有两个表。我想在索引页上的每个相关类别中显示最后一个新闻。因此,我想问"我如何在mysql中为每个带有join子句的类别选择1个最新新闻?":
category_table:
id|category_name|
--+-------------+
1 | Sport |
2 | Policy |
3 | Hot News |
all_news_table:
id | category_id | title
---+-------------+---------------
1 |3 | addsad
2 |2 | asdad
3 |1 | sdadasdasd
3 |2 | sdadasdasd
4 |1 | dsasdas
5 |3 | asdasdasd
6 |3 | sdasdas
让我们假设较高的id表示较新的新闻条目。
首先选择子选择中每个新闻类别的最高id,然后选择这些新闻项的所有数据。
SELECT c.category_name, a.title, a.body
FROM all_news_table a
INNER JOIN category_table c ON (a.category_id = c.id)
WHERE a.id IN (
SELECT max(a1.id) FROM all_news_table a1
GROUP BY a1.category_id)
另一种可能:
SELECT c.category_name, a.title, a.body
FROM all_news_table a
INNER JOIN category_table c ON c.id = a.category_id
LEFT JOIN all_news_table a2 ON a2.category_id = a.category_id
AND a2.id > a.id
WHERE a2.id IS NULL
对于Johan的回答,这可能需要在category_id
和id
上建立索引,并假设您在表all_news_table
的id
列上有NOT NULL
约束。