通过FIELD与子查询一起订购?

时间:2020-04-03 17:35:29

标签: mysql

我想按特定值对查询结果进行排序。

好像我可以用这个

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

这里有什么解决方案?

1 个答案:

答案 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子句对表进行排序的逻辑。