我有一个这样的表:
// 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
您需要将表自身连接起来,以确定接受的答案是哪一行。然后可以在以下信息中使用该信息ORDER BY:
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