我正构建用于在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)。
有没有人对此有任何想法?
答案 0 :(得分:1)
SELECT d1.dialog
FROM dialog_user d1
JOIN dialog_user d2 USING (dialog)
WHERE d1.user = 1
AND d2.user = 2
答案 1 :(得分: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)