【问题标题】:How to sort results order by timestamp except one of them?除了其中一个,如何按时间戳对结果进行排序?
【发布时间】:2016-01-12 01:59:17
【问题描述】:

我有一张这样的桌子:

// Mytable
+----+--------------------+------+------------------+-----------+
| Id |  QuestionOrAnswer  | Type | AcceptedAnswerId | timestamp |
+----+--------------------+------+------------------+-----------+
| 1  | question1          | 0    | 3                | 1         |
| 2  | answer1            | 1    | NULL             | 2         |
| 3  | answer2            | 1    | NULL             | 3         | -- accepted answer
| 4  | answer3            | 1    | NULL             | 4         |
+----+--------------------+------+------------------+-----------+

现在我想要这个结果:(请关注订单)

+----+--------------------+------+------------------+-----------+
| Id |  QuestionOrAnswer  | Type | AcceptedAnswerId | timestamp |
+----+--------------------+------+------------------+-----------+
| 1  | question1          | 0    | 3                | 1         |
| 3  | answer2            | 1    | NULL             | 3         | -- accepted answer 
| 2  | answer1            | 1    | NULL             | 2         |
| 4  | answer3            | 1    | NULL             | 4         |
+----+--------------------+------+------------------+-----------+
//                          ^ 0 means question and 1 means answer

那我该怎么做呢? (我想要和 SO 排序一模一样的东西)


这是我的尝试:

SELECT * FROM Mytable WHERE 1 ORDER BY Type, {I need to add something here}, timestamp

【问题讨论】:

  • 你有什么标准知道id 2应该是第一个??在您的问题中,我不清楚这部分。
  • @Clayton 。 . .因为这是公认的答案。
  • @Clayton Gordon Linoff 对,顺便说一句,id 2 不应该是第一个,id 3 应该是第一个。

标签: mysql sql sql-order-by


【解决方案1】:

您需要将表连接到自身以确定哪一行是可接受的答案。那么信息就可以在ORDER BY

SELECT t.*
FROM Mytable t LEFT JOIN
     Mytable tans
     ON t.id = tans.AcceptedAnswerId
ORDER BY t.Type,
         (tans.id IS NOT NULL) DESC,
         t.timestamp

【讨论】:

  • 谢谢,+1。但似乎很贵,我想如果我在AcceptedAnswerId 列中设置1 接受答案,我可以这样做:ORDER BY type, AcceptedAnswerId, timestamp。你怎么看?
  • @stack 。 . .你应该问另一个问题,更详细地了解你的实际表格和期望的结果。现在改变你的问题是不礼貌的,因为它会使导致投票的答案无效。
  • 我接受了您的解决方案作为我的答案。另外据我所知,您是一位非常专业的数据库案例程序员(我一直很喜欢您的解决方案),但是在这种情况下,我认为this 解决方案比您的解决方案要好得多,我把那个小提琴和你联系起来只是因为我知道你对学习新事物很感兴趣,所以没有冒犯。
  • 顺便说一句,您的solution 不起作用... (但是人们可以了解您的答案的主要思想)
  • @stack 。 . .您的答案是使用order by 中的变量。据我所知,无法保证变量的分配顺序。仅仅因为这可能在一种情况下有效并不意味着它是一种通用解决方案。 (如果您有文档说明在 order by 中使用变量是安全且确定的,那么请分享该信息)。
猜你喜欢
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多