【问题标题】:ORDER BY FIELD (column_name, (SELECT ))ORDER BY FIELD (column_name, (SELECT))
【发布时间】:2013-06-30 13:52:10
【问题描述】:

当前查询,不起作用:

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 的第二个参数,那么它就可以工作。但是当我在一个查询中这样做时,它没有,它根本不使用任何顺序。

【问题讨论】:

    标签: mysql sql field sql-order-by


    【解决方案1】:

    您应该在这种特殊情况下使用 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
    

    ?

    【讨论】:

    • 这只是一个例子,但感谢FIND_IN_SET,它现在可以在我的应用程序中完美运行!
    【解决方案2】:

    这个怎么样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 2011-11-18
      • 2011-04-06
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2014-01-27
      • 2020-08-31
      相关资源
      最近更新 更多