0

我最近在这篇文章Thread Messaging的帮助下构建了一个基于线程的消息系统

涉及的3张表是

member(member_id, member_userunique, and so on..)
thread_participant(thread_id, member_id)
message(message_id, message_subject, message_body, member_id, thread_id, and so on)

在参与者表中,我有以下记录

thread_id | member_id
1---------| 959
1---------| 1
1---------| 6
2---------| 959
2---------| 6
3---------| 959
3---------| 1
3---------| 6

在消息表中我有以下记录(简化版)

message_id | member_id | thread_id
1 ---------| 959 ------| 1
2 ---------| 959 ------| 2
3 ---------| 959 ------| 1
4 ---------| 959 ------| 1
5 ---------| 959 ------| 2
6 ---------| 959 ------| 3
7 ---------| 959 ------| 1

因此我们知道成员 id 959 和 1 参与了 2 个不同的线程,即 3(使用 message[s] id: 6)和 1(使用 message[s] id: 1, 3 ,4 ,7)。

但是,我坚持使用特定查询来获取基于两个用户的特定线程。

到目前为止,这是我修改过的查询

SELECT m.message_id
FROM thread_participant AS participant
INNER JOIN message AS m ON participant.thread_id = m.thread_id
WHERE participant.member_id = 1 OR participant.member_id = 959
GROUP BY participant.thread_id

上面的查询是这个查询的简短版本

SELECT message.message_id,
message.message_title, message.message_body,
message.message_sent_date,
user.member_userunique
FROM message AS message
INNER JOIN member AS user ON message.message_author = user.memberid
WHERE
(
    message.message_id IN
    (
        SELECT m.message_id
        FROM thread_participant AS participant INNER JOIN message AS m
        ON participant.thread_id = m.thread_id
        WHERE (participant.member_id IN (1,959))
        GROUP BY participant.thread_id
    )
)
AND message.message_title != 'UNDEFINED'
ORDER BY message.message_sent_date DESC

注意:最后一个查询我使用的是 IN 子句而不是 OR 子句。有更多的表被使用,例如包含 thread_id 和 creation_date 的 Thread 表。

谁能帮我解决这个问题?谢谢

4

1 回答 1

0

快速尝试(未经测试),但可能使用连接:-

SELECT a.message_id,
    a.message_title, a.message_body,
    a.message_sent_date,
    z.member_userunique
FROM message a
INNER JOIN thread_participant b ON a.thread_id = b.thread_id AND b.member_id = 1
INNER JOIN thread_participant c ON a.thread_id = c.thread_id AND c.member_id = 959
INNER JOIN member z ON a.message_author = z.memberid
ORDER BY a.message_sent_date DESC

从消息表中选择来自具有两个指定成员作为参与者的线程的任何消息,加入成员表以获取有关任何消息作者的详细信息。

于 2013-06-18T10:02:21.037 回答