mysql查询ORDER BY提供的条件

时间:2011-10-13 11:27:49

标签: php mysql

SELECT * FROM newmessage
ORDER BY id <somecondition>

这里我的情况就像:

(5, 3, 2, 1, 4)

即。我希望ORDER根据id的结果,就像我上面给出的订单一样。

5 个答案:

答案 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放在那里或添加过滤器。