首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL: group by和IF语句

MySQL: group by和IF语句
EN

Stack Overflow用户
提问于 2010-05-19 04:03:28
回答 3查看 8.3K关注 0票数 0

默认情况下,parent_id = 0。我想选择parent_id = 0的所有记录,只选择parent_id >0的最后一条记录。

我试过了,但不起作用:

代码语言:javascript
复制
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的记录不应该超过一条。

解决方案是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-19 04:18:21

如果我很好地理解了您的问题,那么您需要具有父时间0的所有记录,并且对于其他parent_id _id,只需要具有最大值‘==’列的记录?我认为parent_id + time是独一无二的。

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2010-05-19 04:11:35

您正在将所有概念混合在一起。WHEREGROUP BYHAVING做不同的事情。您可能需要更详细地阅读此页面:

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值,但是如果您只想查看包含两个以上子项目的父项,那么您可能需要:

代码语言:javascript
复制
SELECT parent_id, COUNT(*) AS article_count
FROM articles
WHERE parent_id >= 0
GROUP BY parent_id
HAVING article_count >= 2

这将向您显示至少包含2个子文章的所有父文章的身份。

票数 0
EN

Stack Overflow用户

发布于 2010-05-19 04:18:42

我认为您希望将其作为两个查询,并使用UNION连接结果。我真的没有足够的信息从你的帖子中确切地知道它会是什么样子,但可能是这样的:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2860699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档