我在PHP中有一个id列表。例如:
$id = (4,6,3,2,5,1)
当我执行这样的查询时:
$query = mysql_query("SELECT * FROM table WHERE ID IN ($id)");
它检索我想要的结果,但是这些项目是按照插入顺序返回的。
相反,我想按照我的数组中给出的顺序检索结果:
information 4, information 6, information 3, information 2, information 5, information 1
我该怎么做?
谢谢你们!解决方案是ORDER BY FIELD(ID,$ id);
答案 0 :(得分:3)
试试这个
$query = "SELECT * FROM table WHERE ID IN ($id) ORDER BY FIELD(ID,$id) ";
你可以看到这个http://marco-pivetta.com/mysql-custom-sorting-rule-mysql/
答案 1 :(得分:1)
$query = "SELECT * FROM table WHERE ID IN ($id) ORDER BY ";
foreach ($id as $i) {
$query .= "ID = $i,";
}
$query = mysql_query(rtrim($query, ','));
您的代码很容易被注入。您应该使用PDO或mysqli正确参数化查询。
答案 2 :(得分:1)
$query="SELECT * FROM table WHERE ID IN ($id) ORDER BY FIND_IN_SET(ID,$id) DESC";
同时检查此
答案 3 :(得分:1)
您可以使用FIELD
,
SELECT *
FROM table
WHERE ID IN (4,6,3,2,5,1)
ORDER BY FIELD(ID, 4,6,3,2,5,1)