Mysql 我如何使用多个列来进行区分?

Mysql 我如何使用多个列来进行区分?,mysql,sql,Mysql,Sql,我正在做一个信息系统。消息是两种不同的类型 第一条消息的相关列有标题和NULL 第二条消息与第一条消息中的一条相关,这些消息没有标题,并且它们有相关列的父消息 以下是我的表格结构: // messages +----+----------+------------------+-----------+-------------+-------------+---------+ | id | title | content | sender_id | receiver_

我正在做一个信息系统。消息是两种不同的类型

  • 第一条消息的
    相关
    列有
    标题
    NULL
  • 第二条消息与第一条消息中的一条相关,这些消息没有
    标题
    ,并且它们有
    相关
    列的父消息
以下是我的表格结构:

// messages
+----+----------+------------------+-----------+-------------+-------------+---------+
| id |  title   |     content      | sender_id | receiver_id |  date_time  | related |
+----+----------+------------------+-----------+-------------+-------------+---------+
| 1  | titel1   | whatever1        | 1         | 3           | 1521097240  | NULL    |
| 2  |          | whatever2        | 3         | 1           | 1521097241  | 1       |
| 3  |          | whatever3        | 1         | 3           | 1521097242  | 1       |
| 4  | title2   | whatever4        | 1         | 4           | 1521097243  | NULL    |
| 5  | title3   | whatever5        | 1         | 5           | 1521097244  | NULL    |
| 6  |          | whatever6        | 5         | 1           | 1521097245  | 5       |
| 7  |          | whatever7        | 4         | 1           | 1521097246  | 4       |
| 8  | title4   | whatever8        | 1         | 4           | 1521097246  | NULL    |
+----+----------+------------------+-----------+-------------+-------------+---------+
/*
  related column: it is NULL for the first message and the id of the parent for othesrs.
现在我需要计算一个用户每天发送给不同用户和不同新消息的消息数

因此,对于
sender\u id=1
,预期结果是
4
。这是我当前的查询,返回
3

SELECT count(distinct receiver_id) as sent_messages_num
FROM users
WHERE sender_id = 1  
AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))

我当前的查询不关心“新消息”。它仅针对不同的用户对消息进行分组。如何添加“即使发送给同一用户,新消息也应计数”的概念

SELECT sum(sent_messages_num)
FROM
(
    SELECT count(distinct receiver_id) as sent_messages_num
    FROM users
    WHERE sender_id = 1  
    AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))
    GROUP BY CASE WHEN related IS NULL THEN id ELSE related END
) t

为什么要使用
独特的
?你想要的是没有它的同一个查询(并且你问题的标题与你的问题不匹配)嗯,我会查出来的,谢谢。只是对我来说有点模糊。
中选择sum(sent_messages_num)的原因是什么
sent\u messages\u num
是一个数字,
sum(sent\u messages\u num)
有意义吗?请注意,我想您应该为子查询定义一个名称。像(…)x中的
作为旁注,你怎么能理解我的问题?我自己也不明白,当我现在读到它时:P@MartinAJ我习惯于在stackoverflow上读字里行间的内容:)我很高兴这有帮助