SELECT * FROM newmessage
ORDER BY id <somecondition>
这里我的情况就像:
(5, 3, 2, 1, 4)
即。我希望ORDER
根据id
的结果,就像我上面给出的订单一样。
答案 0 :(得分:4)
SELECT * FROM newmessage
WHERE id IN (5, 3, 2, 1, 4)
ORDER BY FIELD(id, 5, 3, 2, 1, 4)
UNION
SELECT * FROM newmessage WHERE id NOT IN (5, 3, 2, 1, 4)
答案 1 :(得分:2)
您需要在CASE
子句中使用ORDER BY
语句。这有点尴尬,但做的工作是:
SELECT * FROM newmessage m
ORDER BY CASE WHEN m.someColumn = 5 THEN 1
WHEN m.someColumn = 3 THEN 2
WHEN m.someColumn = 2 THEN 3
WHEN m.someColumn = 1 THEN 4
WHEN m.someColumn = 4 THEN 5
ELSE m.someColumn END
编辑:请注意,如果您能够将“索引”或“排序”列添加到NewMessage
表,那么您应该添加。虽然我的CASE
黑客工作,但它并不漂亮。
答案 2 :(得分:1)
这样做的一种方法是休假:
SELECT * FROM table ORDER BY id IN(7, 13, 12) DESC;
将首先对id为7,12和13的行进行排序,它将不按照您在IN()语句中列出的确切顺序排序。
以下是按特定顺序排序的方法:
SELECT * FROM table ORDER BY id = 7 DESC, id = 13 DESC, id = 12 DESC;
将按照列出的顺序给出行。当然,ASC / DESC部分仍然适用于此,我只是假设您首先需要此ID。这有点麻烦,但我认为没有更优雅的方法来实现这一目标。
答案 3 :(得分:1)
听起来你可能想看看ORDER BY FIELD。
它允许您为给定字段指定自定义顺序,因此您可以使用如下:
SELECT someField,priority FROM myTable
ORDER BY FIELD (priority,'HIGH','MEDIUM','LOW')
哪个会按顺序给你优先顺序,而不是通常在那里按字母顺序排列。
所以您提供的查询的示例可能是:
ORDER BY FIELD(id,'5','3','2','1','4')
答案 4 :(得分:1)
您可以使用FIELD:
在MySQL中进行排序SELECT *
FROM newmessage
ORDER BY FIELD(id, 5, 3, 2, 1, 4)
但是:
当表中有更多行,然后是ORDER子句中指定的行时,这可能无法按预期工作。因此,如果您只想返回这5行,则必须将所有ID放在那里或添加过滤器。