SQL - ORDER BY - Threads&消息

时间:2012-08-21 16:06:59

标签: sql sql-server sql-order-by

我有三张桌子:

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

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

1 个答案:

答案 0 :(得分: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