MySQL ORDER BY IN()

我有一个ID数字的PHP数组。 这些号码已经订购了。

现在我想通过IN()方法得到我的结果,得到所有的ID。

但是,这些ID应该像IN方法那样sorting。

例如:

IN(4,7,3,8,9) 

应该给出如下结果:

 4 - Article 4 7 - Article 7 3 - Article 3 8 - Article 8 9 - Article 9 

有什么build议么? 也许有这样做的function?

谢谢!

4 Solutions collect form web for “MySQL ORDER BY IN()”

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

 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的索引(位置)。 如果没有findstr,则返回0。

虽然这是一种丑陋的黑客,所以如果你没有其他select,真的只能用它。 sorting在您的应用程序的输出可能会更好。

标准的SQL不提供这样做的方法(MySQL可能,但我更喜欢与供应商无关的解决scheme,所以我可以随时切换DBMS)。

在返回结果集之后 ,您应该在后处理中执行此操作。 SQL只能按“order by”子句中指定的顺序返回它们(如果没有这样的子句,则按任意顺序)。

另一种可能性(尽pipe我不喜欢它,但我很荣幸给你select)是多次访问数据库,每个ID都有一个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 
  • 在表variables上创build一个索引
  • selectPostgres SELECT语句中另一个表中的行数
  • 从1小时前selectSQL查询?
  • 记事本++ / Eclipse的sql代码自动缩进选项?
  • MySQL查询select上周的数据?
  • 引用别名(在SELECT中计算)在WHERE子句中
  • 从Java / JPA调用存储过程
  • TransactSQL运行另一个TransactSQL脚本
  • SQL UPDATE中的str_replace?
  • 如何使用EXPLAIN来预测MySQL查询的性能?
  • dynamicOracle Pivot_In_Clause