是否可以为MySQL SELECT
语句指定任意顺序?如,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
IN
之后直接列出的数字的顺序似乎并不重要。
答案 0 :(得分:13)
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函数的字符串参数中缺少空格。
答案 1 :(得分:5)
查看mysql的ORDER BY FIELD。我认为它会完全符合您的要求。
答案 2 :(得分:1)
简单回答:
使用另一个“ordering”int字段检测数据,然后按ORDER BY该字段。这应该是大多数时候所必需的。我已经成功完成了这项工作,客户可以通过在排序字段中应用-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