默认情况下,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的记录不应超过一个。
可能是什么解决方案?
答案 0 :(得分:1)
如果我理解你的问题很好,你需要所有带有parent_id == 0的记录,并且只有其他parent_id的'time'列值最大的记录?我认为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;
答案 1 :(得分:0)
你将所有概念混合在一起。 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值,但如果您只想查看包含2篇以上子文章的父级,则可能需要:
SELECT parent_id, COUNT(*) AS article_count
FROM articles
WHERE parent_id >= 0
GROUP BY parent_id
HAVING article_count >= 2
这将显示至少包含2篇儿童文章的所有父文章的身份。
答案 2 :(得分:0)
我认为您希望将其作为两个查询进行,并使用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_id