0

我在 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);

4

4 回答 4

3

尝试这个

$query = "SELECT * FROM table WHERE ID IN ($id) ORDER BY FIELD(ID,$id) ";

你可以看到这个http://marco-pivetta.com/mysql-custom-sorting-rule-mysql/

于 2013-03-23T16:36:23.520 回答
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 使用正确的参数化查询。

于 2013-03-23T16:35:24.693 回答
1
$query="SELECT * FROM table WHERE ID IN ($id) ORDER BY FIND_IN_SET(ID,$id) DESC";

还要检查这个

使用 IN() 选择查询且不进行任何排序

于 2013-03-23T16:36:00.287 回答
1

你可以用FIELD这个,

SELECT * 
FROM table 
WHERE ID IN (4,6,3,2,5,1)
ORDER BY FIELD(ID, 4,6,3,2,5,1)
于 2013-03-23T16:36:46.823 回答