【问题标题】:How to Order by in($str)如何通过 in($str) 订购
【发布时间】:2013-04-11 15:52:53
【问题描述】:

当我从表中选择时,我遇到了 orderby 问题 我有桌子

ID        value
1         2201
2         5412
3         3300
4         6600
5         7700
6         2200
-------------------
My sql query:
SELECT * FROM table WHERE id in ('2','4','6','1','3')

结果是:

ID        value
6         2200
1         2201
3         3300
2         5412
4         6600

而且我不需要排序,我只想在字符串中显示位置

ID        value
2         5412
4         6600
6         2200
1         2201
3         3300

提前致谢!

【问题讨论】:

  • 你能用更多的问题格式来表达这个吗?你到底想完成什么?

标签: mysql sql-order-by


【解决方案1】:

试试这个

   SELECT * FROM table1 WHERE id in ('2','4','6','1','3')
   order by FIELD(id, '2', '4', '6', '1', '3')

DEMO HERE

【讨论】:

  • 非常感谢,我的问题已经解决了,我的代码是:SELECT * FROM table WHERE id in ($str) ORDER BY FIELD(id,$str)
  • 欢迎您!如果对您有帮助,请确保接受答案
【解决方案2】:

一种方法:

SELECT * FROM table 
WHERE id IN (2,4,6,1,3)
ORDER BY ID = 2 DESC, ID = 4 DESC, ID = 6 DESC, ID = 1 DESC, ID = 3 DESC;

【讨论】:

  • 谢谢,但是字符串中的值是可变的。字符串中的值会改变,我之前不知道。
【解决方案3】:

对于不保证返回元组顺序的 SQL,没有办法做到这一点。您必须在您的应用程序中根据该顺序进行排序或创建另一个列,如下所示:

1 2 5412
2 4 6600
3 6 2200

etc...

并按新列排序。否则,应用程序中的代码将取决于您用于调用 sql 的语言。

问候,

杰森定位

【讨论】:

    【解决方案4】:

    我的问题已经解决了,我的代码是:

    SELECT * FROM table WHERE id in ($str) ORDER BY FIELD(id,$str)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2017-07-30
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多