我有一个 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
有什么建议么?也许有一个功能可以做到这一点?
谢谢!
我有一个 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
有什么建议么?也许有一个功能可以做到这一点?
谢谢!
我想你可能正在寻找函数FIELD——虽然通常被认为是一个字符串函数,但它也适用于数字!
ORDER BY FIELD(field_name, 3,2,5,7,8,1)
你可以使用FIELD()
:
ORDER BY FIELD(id, 3,2,5,7,8,1)
返回 str1, str2, str3, ... 列表中 str 的索引(位置)。如果未找到 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
为什么你想让你的数据像你的例子一样无序排列?
如果您不介意连接长查询,请尝试以下方式:
SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2