12

是否可以为 MySQLSELECT语句指定任意顺序?例如,

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);

紧随其后的数字顺序IN似乎无关紧要。

4

3 回答 3

18

FIND_IN_SET 函数可以解决问题

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY FIND_IN_SET(id, '1,3,2,9,7');

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

编辑:注意 find_in_set 函数的字符串参数中缺少空格。

于 2010-12-01T17:33:19.863 回答
6

查看 mysql 的ORDER BY FIELD。我认为它会做你想要的。

于 2010-12-01T18:58:11.420 回答
2

简单的回答:

使用另一个“排序” int 字段检测您的数据,然后按该字段排序。大多数时候这应该是所有必要的。我已经成功地做到了这一点,客户可以通过在订购字段中应用低值(如 -1 或 -99)来将某些产品冒泡到特色列表等中。

复杂的答案:

如果您想规范化该排序,这将适用,并且如果您有另一个字段作为订单中的第二个因素,那么它已经在您的主表中。如果您有与每个订购点相关的其他信息(例如备注),这也会有所帮助。或者,如果很多表要实现这种任意顺序,并且您想从一个地方编排/修改该顺序。

您要做的是将“任意”订单放在您可以加入的表中,然后按该字段排序:

SELECT t.*, o.ordering
FROM table_name AS t
LEFT JOIN table_name_ordering AS o ON t.ordering_id = o.id
ORDER BY o.ordering, t.other_field
于 2010-12-01T17:39:40.387 回答