- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含以下数据的表:
mysql> describe Post;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| post_date | datetime | NO | | NULL | |
| in_reply_to | int(11) | YES | | NULL | |
| text | varchar(160) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
mysql> select id as "Row ID", user_id as "User ID", post_date as "Post Date", IF(in_reply_to is NULL, "None", in_reply_to) as "In Reply To Post ID:", CONCAT(LEFT(text,40),"...") as "Post Text" from Post;
+--------+---------+---------------------+----------------------+---------------------------------------------+
| Row ID | User ID | Post Date | In Reply To Post ID: | Post Text |
+--------+---------+---------------------+----------------------+---------------------------------------------+
| 1 | 1 | 2015-08-14 20:38:00 | None | This is the original test post that I pu... |
| 2 | 2 | 2015-08-14 20:39:00 | None | This is the second post that I put into ... |
| 3 | 5 | 2015-08-14 22:00:00 | 1 | Hahaha, that post was hilarious. I canno... |
| 4 | 4 | 2015-08-14 23:00:00 | 1 | Today I saw a cat jump off the roof, ont... |
| 5 | 4 | 2015-08-14 23:00:00 | None | Today I saw a cat jump off the roof, ont... |
| 27 | 1 | 2015-09-08 05:53:40 | 2 | This is a mad reply ay... |
| 28 | 1 | 2015-09-08 11:24:05 | None | Yolo Swag... |
+--------+---------+---------------------+----------------------+---------------------------------------------+
7 rows in set (0.05 sec)
如果您不确定它们代表什么,每个列都有一个描述。对于这个问题,我关心的两列是 id
和 in_reply_to
。
in_reply_to
是一个 NULLABLE
FK 整数,它引用同一个表中的 id
;如果in_reply_to
为NULL
,则表示该帖子为原始帖子,如果为整数值,则为回复帖子,表示该帖子的id回复。
在下面的例子中有4个原始帖子(1、2、5、28)和3个回复(3、4、27),即3是对1的回复,4也是对1的回复,27是对 2 的回复。我正在寻找执行生成如下输出的 SQL 查询:
Num Replies
是一个 COUNT
行,表示同一表中有多少行的 in_reply_to
等于 id
;如果没有对该帖子的回复,则显示 0
(即没有行包含特定帖子的 id 作为它们的 in_reply_to
列。
谢谢。
解决方案(根据安德斯的回答):
mysql> SELECT Post.id, Post.user_id, Post.post_date, Post.in_reply_to, CONCAT(LEFT(Post.text,40)), IF(counts.count IS NULL, 0, counts.count) AS 'Num of Replies' FROM Post LEFT JOIN (SELECT in_reply_to AS id, COUNT(*) AS count FROM Post WHERE in_reply_to IS NOT NULL GROUP BY in_reply_to) AS counts ON Post.id = counts.id;
+----+---------+---------------------+-------------+------------------------------------------+----------------+
| id | user_id | post_date | in_reply_to | CONCAT(LEFT(Post.text,40)) | Num of Replies |
+----+---------+---------------------+-------------+------------------------------------------+----------------+
| 1 | 1 | 2015-08-14 20:38:00 | NULL | This is the original test post that I pu | 2 |
| 2 | 2 | 2015-08-14 20:39:00 | NULL | This is the second post that I put into | 1 |
| 3 | 5 | 2015-08-14 22:00:00 | 1 | Hahaha, that post was hilarious. I canno | 0 |
| 4 | 4 | 2015-08-14 23:00:00 | 1 | Today I saw a cat jump off the roof, ont | 0 |
| 5 | 4 | 2015-08-14 23:00:00 | NULL | Today I saw a cat jump off the roof, ont | 0 |
| 27 | 1 | 2015-09-08 05:53:40 | 2 | This is a mad reply ay | 0 |
| 28 | 1 | 2015-09-08 11:24:05 | NULL | Random Text | 0 |
+----+---------+---------------------+-------------+------------------------------------------+----------------+
7 rows in set (0.00 sec)
最佳答案
您需要在同一个表上连接两个查询。第一个只选择所有帖子,第二个计算每个帖子的回复数。这是一个左连接,因为您想要包含没有任何回复的帖子(不会从第二个查询返回)。 IF
用于将 NULL
值转换为 0
。
SELECT
post.id,
-- Other fields...,
IF(counts.count IS NULL, 0, counts.count) AS count
FROM post
LEFT JOIN
(SELECT
in_reply_to AS id,
COUNT(*) AS count
FROM post
WHERE in_reply_to IS NOT NULL
GROUP BY in_reply_to) AS counts
ON post.id = counts.id
免责声明:我没有对此进行测试。
关于MySQL 计算两列相同且不为空的地方,同一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32473094/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!