假设我有一个包含两个表的数据库:categories
和articles
。每篇文章都属于一个类别。
现在,我们假设我想获取符合特定条件的每个类别的最新文章(阅读:文章的内容)。如果不是那个额外的标准,我可以添加一个名为last_article_id
的列或类似于categories
表的列 - 即使它没有被正确标准化。
我怎么能这样做?我假设使用GROUP BY
和HAVING
?
答案 0 :(得分: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
答案 1 :(得分:0)
如果您向我们提供了表格模式,我们可能会更具体一些,但您可以尝试类似(12.2.9.6. EXISTS and NOT EXISTS,SELECT 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
)
答案 2 :(得分:0)
假设文章表中的id代表总是增加的数字,这应该有效。使用id在语义上不正确恕我直言,你应该使用时间/日期夯实字段(如果有的话)。
SELECT * FROM articles WHERE article_id IN
(
SELECT
MAX(article_id)
FROM
articles
WHERE [your filters here]
GROUP BY
category_id
)