MySQL ORDER BY IN()

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

有什么建议吗? 也许有这样做的功能?

谢谢!

47453 次浏览

你只需要按照语句给出正确的顺序。

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

标准 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.

我想您可能正在寻找函数 费尔德——虽然通常认为它是一个字符串函数,但它对于数字也很有用!

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,... list 中 str 的索引(位置)。如果没有找到 str,返回0。

这是一种丑陋的黑客虽然,所以真的只有使用它,如果你没有其他选择。对应用程序中的输出进行排序可能会更好。