MySQL ORDER BY IN()
-
19-09-2019 - |
题
我有一个 PHP 数组,其中包含多个 ID。这些号码已经被订购。
现在我想通过 IN() 方法获取结果,以获取所有 ID。
但是,这些 ID 应该像 IN 方法中那样排序。
例如:
IN(4,7,3,8,9)
应该给出如下结果:
4 - Article 4
7 - Article 7
3 - Article 3
8 - Article 8
9 - Article 9
有什么建议么?也许有一个函数可以做到这一点?
谢谢!
解决方案
我想你可能会寻找功能领域! - 而通常被认为是一个字符串函数,它工作正常换号,太
ORDER BY FIELD(field_name, 3,2,5,7,8,1)
其他提示
您可以使用 FIELD()
:
ORDER BY FIELD(id, 3,2,5,7,8,1)
返回STR在STR1,STR2,STR3,...列表中的索引(位置)。如果未找到STR返回0。
这是一种丑陋的黑客攻击的,所以如果你没有别的选择,只有真正使用它。排序在你的应用程序的输出可以是更好的。
标准 SQL 没有提供执行此操作的方法(MySQL 可以,但我更喜欢供应商中立的解决方案,这样我可以随时切换 DBMS)。
这是你应该在后期处理中做的事情 后 返回结果集。SQL 只能按照“order by”子句(或 任何 如果没有这样的条款,则订购)。
另一种可能性(虽然我不喜欢它,但我很荣幸为您提供选择)是多次访问数据库,每个 ID 一次,并在它们进入时对其进行处理:
select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.
您只需要通过语句来给出正确的顺序。
SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID
你为什么要得到你的数据有序无序就像你的榜样?
如果你不介意concatening长的查询,尝试这种方式:
SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
不隶属于 StackOverflow