0

在尝试进行查询以将消息分组到对话中时,我遇到了一些问题。这样具有相同发送者和接收者的消息将在同一个会话中。还会有小组对话,这意味着两个人和两个人四个人一起交谈。

我的数据库表如下所示:

桌子: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

所以基本上需要做的是按以下方式分组:
- 分组行对话,其中fromto与其他行相等,而group_1group_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_1group_2

group_1并且group_2是为了让我可以将用户放入一个组中,并使一个组能够与另一个组交谈。

因此,他们不使用toand from,而是使用group_1and group_2from它应该像用户对话(在哪里和to被定义)一样对组对话进行分组。

你可以看到一行是一个组,当to = 0. 当 时to != 0,则它不是一个群。

它应该 GROUPgroup_1group_2,就像用户一样。

4

2 回答 2

1

这是我的建议;

SELECT * FROM messages m GROUP BY m._from HAVING (m._to!=0 AND m.group_1=0 AND m.group_2=0)

SELECT * FROM messages m WHERE m.group_1=m._from OR m.group_2=m._to;

我也很难理解 group_1 和 group_2 的关系/目的。

单一查询(由提问者请求)

SELECT * FROM messages m WHERE m.group_1=m._from OR m.group_2=m._to OR m.group_1=0 AND m.group_2=0
于 2013-04-25T12:08:20.327 回答
0

您正在寻找的是GROUP BY <field> HAVING <condition>. 您的“需要做什么”有点混乱, group_1 和 group_2 也令人困惑。您正在寻找的东西可能是在以下方向:

SELECT   *
FROM     messages m
GROUP BY m.from HAVING (
    m.from = group_1 AND
    m.to   = group_2
)

我希望这将帮助您朝着正确的方向前进。

于 2013-04-25T08:08:42.803 回答