Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按特定顺序选择特定行_Php_Mysql_Sql_Sql Order By_Where Clause - Fatal编程技术网

Php 按特定顺序选择特定行

Php 按特定顺序选择特定行,php,mysql,sql,sql-order-by,where-clause,Php,Mysql,Sql,Sql Order By,Where Clause,我有一个脚本(在PHP中),它通过一系列不同的比较,根据行id在表中生成一个有序的条目数组。然后我将数组内插到一个字符串中,并使用WHERE来选择那些特定的行,但是我不知道如何按照数组中的顺序对它们进行排序 $order_array = [50,49,42,52,53,54,51,48,47] $order_string = implode(',', $order_array); // echo $order_string returns '50,49,42,52,53,54,51,48,47'

我有一个脚本(在PHP中),它通过一系列不同的比较,根据行id在表中生成一个有序的条目数组。然后我将数组内插到一个字符串中,并使用WHERE来选择那些特定的行,但是我不知道如何按照数组中的顺序对它们进行排序

$order_array = [50,49,42,52,53,54,51,48,47]
$order_string = implode(',', $order_array);
// echo $order_string returns '50,49,42,52,53,54,51,48,47'
$sql_todo = "SELECT * FROM todo_list WHERE id IN ({$order_string})";
    if ($result_todo = mysqli_query($link, $sql_todo)) {
        while ($row_todo = mysqli_fetch_assoc($result_todo)) {
这将成功选择所需的行,但它们的顺序与数组不同。我知道我没有告诉它那样订购(所以它没有),但我不知道如何做到这一点

谢谢你抽出时间

赛斯

你可以使用:

field()
返回列表中第一个参数的索引,您可以直接使用该索引进行排序

旁注:您可能应该使用准备好的语句,而不是在查询字符串中串联值(如果您的值来自代码之外,这是必须的)

"SELECT * FROM todo_list WHERE id IN ({$order_string}) ORDER BY FIELD(id, {$order_string})"