Php MySQL ORDER BY IN()

Php MySQL ORDER BY IN(),php,mysql,sql-order-by,in-function,Php,Mysql,Sql Order By,In Function,我有一个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 有什么建议吗?也许有一个函数可以做到这一点 谢谢 您只需给出正确的order by语句即可 SELECT ID FROM myT

我有一个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
有什么建议吗?也许有一个函数可以做到这一点


谢谢

您只需给出正确的order by语句即可

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并没有提供实现这一点的方法,但我更喜欢与供应商无关的解决方案,这样我就可以随时切换DBMS

这是返回结果集后在后处理中应该执行的操作。SQL只能按ORDERBY子句中指定的顺序返回它们,如果没有这样的子句,则只能按任意顺序返回它们

另一种可能性虽然我不喜欢,但我很荣幸能给你一个选择,就是多次访问数据库,每个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)
您可以使用:

返回str在str1、str2、str3。。。列表如果未找到str,则返回0


这是一种丑陋的黑客,所以只有当你别无选择时才使用它。在应用程序中对输出进行排序可能会更好。

与这些数字相关的其他数据是什么?这可能会给我们一个线索,为什么你要按那个顺序。谢谢。但这不会起作用:选择id,name FROM articles,其中id in 7,4,21 ORDER BY id应该显示7,4,21。但它会显示:4,7,21……工会并不保证秩序。因此,我的第二枪会发出通缉令,但这不是最甜蜜的事情。我想你误解了我的评论,@BeowulfOF。SQL规范中没有任何内容表明id=1行将在id=2行之前返回。工会只是工会的选择,它不控制他们进入的顺序。不完全是,帕克斯,我的回答是让亨克斯评论。没关系,我没有写得很清楚,没错。我刚刚在Paul Dubois的MySQL烹饪书中找到了它:从文章中选择id,名称,其中id在7,4,21中按FIELDid排序,7,4,21谢谢!该死,你们这些人真快-@亨克,很高兴能帮助你,但是没有投票权的接受是一件非常奇怪的事情,所以-你为什么没有投票权给我?-那真的很聪明。我不会想到将字段放在WHERE子句之后的任何位置,因为担心它会引发语法错误,或者DB会对使用哪个“id”感到困惑。“但这是有道理的,在我的大脑未爆炸后。”安东尼,很高兴扩展了你的大脑——尽管这让我觉得这是一个更深更黑暗的谜,为什么没有人投票反对呢!——确实很奇怪…:-。您可以在标准SQL中使用CASE col在*1st val*然后1在*2nd val*然后2。。。终止并不是说我会推荐这样的东西!
ORDER BY FIELD(id, 3,2,5,7,8,1)