在尝试进行查询以将消息分组到对话中时,我遇到了一些问题。这样具有相同发送者和接收者的消息将在同一个会话中。还会有小组对话,这意味着两个人和两个人四个人一起交谈。
我的数据库表如下所示:
桌子:messages
+----+------+----+---------+---------+
| id | from | to | group_1 | group_2 |
+----+------+----+---------+---------+
| 1 | 1 | 2 | 0 | 0 |
| 2 | 2 | 1 | 0 | 0 |
| 3 | 1 | 0 | 1 | 2 |
| 4 | 2 | 0 | 2 | 1 |
| 5 | 3 | 0 | 1 | 2 |
| 6 | 4 | 0 | 2 | 1 |
| 7 | 4 | 1 | 0 | 0 |
| 8 | 1 | 4 | 0 | 0 |
+----+------+----+---------+---------+
我已经尝试过以下方法,但后来我把所有的消息都拿出来了,所以我需要分组,让它们粘在一行而不是多行用于同一个对话。
选择 * 从messages
所以基本上需要做的是按以下方式分组:
- 分组行对话,其中from
和to
与其他行相等,而group_1
和group_2
= 0。但它也应该将那些to
与其他行相等的行分组from
,以及其他绕道而行,但仍然是 while group_1
and group_2
= 0。(如上表中的前 2 行)
- 分组行对话 where group_1
and group_2
is equal with other rows, while to
= 0, and as well group_1
is equal with other rows group_2
, and other绕道而行,但仍然是 while to
= 0。(如 id 为 3 和 4 的行)
因此,基本上它应该将所有群组相互交谈以及用户相互交谈的消息分组。
编辑
更好地解释group_1
和group_2
group_1
并且group_2
是为了让我可以将用户放入一个组中,并使一个组能够与另一个组交谈。
因此,他们不使用to
and from
,而是使用group_1
and group_2
。from
它应该像用户对话(在哪里和to
被定义)一样对组对话进行分组。
你可以看到一行是一个组,当to = 0
. 当 时to != 0
,则它不是一个群。
它应该 GROUPgroup_1
和group_2
,就像用户一样。