ORDER BY FIELD(column_name,(SELECT))

时间:2013-06-30 13:52:10

标签: mysql sql field sql-order-by

当前查询,不起作用:

SELECT * 
FROM users
ORDER BY FIELD(sum, (
  SELECT GROUP_CONCAT(sum ORDER BY sum SEPARATOR ',') 
  FROM users
  LIMIT 1
) ASC

我想根据总和通过自定义顺序选择users。如果我从查询SELECT GROUP_CONCAT(sum ORDER BY sum SEPARATOR ',') FROM users LIMIT 1获得结果然后将其添加到FIELD的第二个参数,那么它可以工作。但是,当我在一个查询中执行此操作时,它不会,它根本不使用任何订单。

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下你应该使用FIND_IN_SET:

SELECT * 
FROM users
ORDER BY FIND_IN_SET(sum, (
  SELECT GROUP_CONCAT(sum ORDER BY sum SEPARATOR ',') 
  FROM users
  LIMIT 1
) ASC

FIELD需要一个项目列表:

FIELD(sum, sum1, sum2, sum3, sum4)

而FIND_IN_SET需要一个包含逗号分隔值列表的字符串:

FIND_IN_SET(sum, 'sum1,sum2,sum3,sum4')

但为什么不呢:

SELECT *
FROM users
ORDER BY sum DESC

答案 1 :(得分:0)

这个怎么样

SELECT *,(SELECT GROUP_CONCAT(sum ORDER BY sum SEPARATOR ',') FROM users LIMIT 1) as mysum
FROM users ORDER BY mysum ASC