例如我有这段代码:
SELECT *
FROM table_name
WHERE column_name IN (value6,value4,value11,value19)
有没有办法在查询中按照确切的顺序排序结果?上面的代码返回table_name的默认顺序,完全忽略IN
值的序列。我知道我可以在PHP中进行额外的编码,以便根据IN值正确排序,但这会产生很大的开销。
答案 0 :(得分:23)
SELECT
*
FROM
table_name
WHERE column_name IN (value6,value4,value11,value19)
ORDER BY FIELD(column_name,value6,value4,value11,value19)
此处的说明:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_field
- FIELD(STR,STR1,STR2,STR3,...)
返回str的索引(位置) str1,str2,str3,...列表。 如果未找到str,则返回0。
答案 1 :(得分:0)
对于DB不可知的答案,请看这里: Order resultset based on WHERE IN clause data 但是,我希望有一个与DB无关的数组结构。