Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何按时间戳对结果排序,除了其中一个之外?_Mysql_Sql_Sql Order By - Fatal编程技术网

Mysql 如何按时间戳对结果排序,除了其中一个之外?

Mysql 如何按时间戳对结果排序,除了其中一个之外?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一张这样的桌子: // Mytable +----+--------------------+------+------------------+-----------+ | Id | QuestionOrAnswer | Type | AcceptedAnswerId | timestamp | +----+--------------------+------+------------------+-----------+ | 1 | question1 | 0

我有一张这样的桌子:

// 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         |
+----+--------------------+------+------------------+-----------+
现在我想要这个结果:(请关注订单)

那我怎么做呢?(我想要完全像这样的东西)


以下是我的尝试:

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

您需要将表连接到表本身,以确定哪一行是可接受的答案。然后,该信息可以按的顺序使用:

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

你有什么标准知道id 2应该是第一个??在你的问题中,那部分我不清楚。@Clayton。因为这是公认的答案。@Clayton Gordon Linoff对了,顺便说一句,id 2不应该是第一个,id 3应该是第一个。谢谢,+1。但是似乎很昂贵,我想如果我在接受答案的
AcceptedAnswerId
列中设置
1
,我就可以这样做:
按类型排序,接受answerid,时间戳
。你怎么想?@stack。你应该问另一个问题,更详细地说明你的实际表格和期望的结果。现在改变你的问题是不礼貌的,因为它会使得票率下降的答案无效。我接受你的答案作为我的答案。据我所知,你是一个非常专业的数据库程序员(我总是喜欢你的解决方案),但在这种情况下,我认为解决方案比你的要好得多,我把小提琴和你联系起来,只是因为我知道你对学习新事物很感兴趣,所以没有冒犯的意思。顺便说一句,你的解决方案不起作用。。。(不过人们可以了解你答案的大意)@stack。您的答案是使用
顺序中的变量。据我所知,对于变量的赋值顺序没有任何保证。仅仅因为这在一种情况下可能有效,并不意味着这是一个普遍的解决方案。(如果您有文档表明在
顺序中使用变量是安全和确定的,请分享这些信息)。
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