我想按特定值对查询结果进行排序。
好像我可以用这个
SELECT
column
FROM
table
ORDER BY
IF(
FIELD(
id,
3,1,2
) = 0,
1,
0
) ASC,
FIELD(
id,
3,1,2
)
我的问题是3,1,2
来自另一个表列。将3,1,2
替换为(来自...的SELECT列)无法正常工作。因为SELECT返回的结果是"3,1,2"
而不是3,1,2
我也可以一一提取3,1,2
,但是在这种情况下,我会收到错误Subquery returns more than 1 row
。
这里有什么解决方案?
答案 0 :(得分:0)
假设返回值3, 1, 2
的语句是这样的:
SELECT somecolumn FROM sometable ORDER BY someothercolumn
然后,您可以使用GROUP_CONCAT()
创建一个逗号分隔的包含以下值的字符串:
SELECT GROUP_CONCAT(somecolumn ORDER BY someothercolumn) col FROM sometable
,然后使用FIND_IN_SET()
代替FIELD()
:
SELECT t.column
FROM table t
CROSS JOIN (SELECT GROUP_CONCAT(somecolumn col ORDER BY someothercolumn) FROM sometable) s
ORDER BY
SUBSTRING_INDEX(t.id, s.col) = 0,
SUBSTRING_INDEX(t.id, s.col)
我希望我能理解您要使用ORDER BY
子句对表进行排序的逻辑。