77

我有一个 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

有什么建议么?也许有一个功能可以做到这一点?

谢谢!

4

4 回答 4

163

我想你可能正在寻找函数FIELD——虽然通常被认为是一个字符串函数,但它也适用于数字!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)
于 2009-08-26T05:16:01.140 回答
10

你可以使用FIELD()

ORDER BY FIELD(id, 3,2,5,7,8,1)

返回 str1, str2, str3, ... 列表中 str 的索引(位置)。如果未找到 str,则返回 0。

不过,这有点丑陋,所以只有在别无选择的情况下才使用它。在您的应用程序中对输出进行排序可能会更好。

于 2009-08-26T05:18:40.993 回答
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.
于 2009-08-26T05:13:07.417 回答
-2

您只需要通过声明给出正确的顺序。

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
于 2009-08-26T05:12:05.843 回答