mysql查询返回“特定参与者的对话框ID”

时间:2013-03-31 06:08:32

标签: php mysql message

我正构建用于在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)。

有没有人对此有任何想法?

2 个答案:

答案 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)