是否可以为 MySQLSELECT
语句指定任意顺序?例如,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
紧随其后的数字顺序IN
似乎无关紧要。
是否可以为 MySQLSELECT
语句指定任意顺序?例如,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
紧随其后的数字顺序IN
似乎无关紧要。
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 函数的字符串参数中缺少空格。
查看 mysql 的ORDER BY FIELD。我认为它会做你想要的。
简单的回答:
使用另一个“排序” 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