0

我有三张桌子:

Message_Threads: ( thread_ID )
Message_Users:   ( thread_ID, user_ID, notify )
Messages:        ( thread_ID, user_ID, message_ID, date_created )

我试图按线程中最新消息的顺序仅列出线程,但我想显示那些在其余消息之上具有 notify=1 的线程(当一个新的线程上的所有其他用户的通知设置为 1当他们访问该线程时,消息被发布并设置为 0)。有人给我一个怪物选择声明吗?

4

1 回答 1

1

您的数据结构没有明确消息和消息用户的关系。我的假设是这些都加入了 thread_id 和 user_id。然后在线程级别聚合它们:

select t.thread_id
from thread t join
     message m
     on t.thread_id = m.thread_id join
     message_users mu
     on m.thread_id = mu.thread_id and
        m.user_id = mu.user_id
group by thread_id
order by max(mu.notify) desc, max(m.date_created) desc

这其中的关键是最终的顺序。按先通知排序,但降序排列,因此“1”出现在“0”之前(假设非 1 值为 0)。然后按创建日期。

要将其限制为特定用户,请在组之前使用 WHERE 语句:

WHERE u.user_id = session_user_id
于 2012-08-21T16:11:53.157 回答