1

我正在构建表格以在我的 OA 系统中创建一个对话框外观的用户消息功能。

我得到了一个表格,指示像这样的 dialog_user 对话的参与者:

dialog  user
1       1
1       2
2       1
2       3

现在用户 1 向用户 2 发送消息。所以我需要创建一条消息,并将消息插入到用户 1 和用户 2 参与的对话框中。

如何在一个或有限的查询中找到对话 ID?

此外,我还在实现一对多的消息发送功能。每个接收者都会在他和发送者参与的对话中看到消息。所以我需要找到发送者和每个接收者参与的所有对话,并将新的消息 ID 插入其中。这可以在一个漂亮的查询中完成吗?

我考虑过保存参与者内爆排序的字符串,例如

dialog  users
1       1,2
1       1,3

但我认为这不是一个好习惯,因为用户字段应该是 varchar 并且长度有限(比如 255)。

有人对此有任何想法吗?

4

2 回答 2

1
SELECT d1.dialog
FROM dialog_user d1
JOIN dialog_user d2 USING (dialog)
WHERE d1.user = 1
AND d2.user = 2
于 2013-03-31T06:47:44.117 回答
0

可能是这样的(假设 DialogId/UserId 已编入索引):

SELECT
    DISTINCT(DialogId)
FROM
    Dialogs d
WHERE
    EXISTS (SELECT NULL FROM Dialogs p1 WHERE p1.DialogId = d.DialogId AND p1.UserId = 1)
    AND EXISTS (SELECT NULL FROM Dialogs p1 WHERE p1.DialogId = d.DialogId AND p1.UserId = 2)
于 2013-03-31T06:25:38.107 回答