默认情况下,parent_id = 0。我想选择parent_id = 0的所有记录,只选择parent_id >0的最后一条记录。
我试过了,但不起作用:
SELECT * FROM `articles`
IF `parent_id` > 0 THEN
GROUP BY `parent_id`
HAVING COUNT(`parent_id`) >= 1
END;
ORDER BY `time` DESC我的意思是,如果有几条记录的parent_id = 2,那么应该只返回其中的一条。此外,如果有多条parent_id = 5的记录,则只返回其中的一条。换句话说,除了parent_id = 0的记录之外,每个parent_id的记录不应该超过一条。
解决方案是什么?
发布于 2010-05-19 04:18:21
如果我很好地理解了您的问题,那么您需要具有父时间0的所有记录,并且对于其他parent_id _id,只需要具有最大值‘==’列的记录?我认为parent_id + time是独一无二的。
SELECT a.* FROM `articles` a
INNER JOIN
(SELECT parent_id, MAX(`time`) AS `time` FROM `articles` WHERE parent_id >0) t
ON (t.parent_id = a.parent_id AND a.`time` = t.`time`)
UNION
SELECT * FROM `articles` WHERE parent_id = 0;发布于 2010-05-19 04:11:35
您正在将所有概念混合在一起。WHERE、GROUP BY和HAVING做不同的事情。您可能需要更详细地阅读此页面:
http://dev.mysql.com/doc/refman/5.1/en/select.html
但如果我对你的所作所为做了一些假设...
您可能希望从这一部分开始:
SELECT * FROM articles WHERE parent_id > 0
但是现在,您希望将具有相同父级的文章组合在一起。假设每篇文章都有一个id,也许您希望
SELECT parent_id, COUNT(*) AS article_count FROM articles WHERE parent_id >= 0 GROUP BY parent_id
现在,所有这些行都将是包含至少一个子项目的parent_id值,但是如果您只想查看包含两个以上子项目的父项,那么您可能需要:
SELECT parent_id, COUNT(*) AS article_count
FROM articles
WHERE parent_id >= 0
GROUP BY parent_id
HAVING article_count >= 2这将向您显示至少包含2个子文章的所有父文章的身份。
发布于 2010-05-19 04:18:42
我认为您希望将其作为两个查询,并使用UNION连接结果。我真的没有足够的信息从你的帖子中确切地知道它会是什么样子,但可能是这样的:
SELECT parent_id, time FROM articles WHERE parent_id = 0
UNION ALL
SELECT parent_id, MAX(TIME) FROM articles WHERE parent_id > 0
GROUP BY parent_idhttps://stackoverflow.com/questions/2860699
复制相似问题