在尝试进行查询以将消息分组到对话中时,我遇到了一些问题。这样具有相同发送者和接收者的消息将在同一个会话中。还会有小组对话,这意味着两个人和两个人四个人一起交谈。
我的数据库表如下所示:
桌子: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_1and group_2= 0。(如上表中的前 2 行)
- 分组行对话 where group_1and group_2is equal with other rows, while to= 0, and as well group_1is equal with other rows group_2, and other绕道而行,但仍然是 while to= 0。(如 id 为 3 和 4 的行)
因此,基本上它应该将所有群组相互交谈以及用户相互交谈的消息分组。
编辑
更好地解释group_1和group_2
group_1并且group_2是为了让我可以将用户放入一个组中,并使一个组能够与另一个组交谈。
因此,他们不使用toand from,而是使用group_1and group_2。from它应该像用户对话(在哪里和to被定义)一样对组对话进行分组。
你可以看到一行是一个组,当to = 0. 当 时to != 0,则它不是一个群。
它应该 GROUPgroup_1和group_2,就像用户一样。