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 
  • SQLite - replacestring的一部分
  • 如何在MySQL中创build关系
  • 如何获得最后插入的ID?
  • SQL Server中的Group By,Having和Where子句的执行顺序是什么?
  • SQL Serverreplace,删除一定的字符后
  • 更改视图中使用的PostgreSQL列
  • SQL Server:如何join到第一行
  • 在交易中使用“GO”
  • SQL - 有VS在哪里
  • 将NTEXT列与常数值进行比较的正确方法是什么?
  • Concat字段值在SQL Server中string