【问题标题】:SQL - ORDER BY - Threads & MessagesSQL - ORDER BY - 线程和消息
【发布时间】:2012-08-21 16:06:58
【问题描述】:

我有三张桌子:

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

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

【问题讨论】:

  • 或者如果您认为重组表格会使事情变得更容易,请提出建议。
  • 这是否意味着您不想要线程的消息,只想要线程本身,对吗?因为那我不明白您所说的那些有notify=1 应该高于其余部分。你能发布一个结果的例子吗?

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


【解决方案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)。然后按创建日期。

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

WHERE u.user_id = session_user_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多