如何以手动指定的顺序检索项目

时间:2013-03-23 16:31:25

标签: mysql

我在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 个答案:

答案 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";

同时检查此

Select query using IN() and without any sorting

答案 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)