按特定顺序选择特定行[重复]

Posted

技术标签:

【中文标题】按特定顺序选择特定行[重复]【英文标题】:Select Specific Rows in a Specific Order [duplicate] 【发布时间】:2020-05-27 02:41:48 【问题描述】:

我有一个脚本(在 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)) 

这成功地选择了所需的行,但它们与数组的顺序不同。我知道我没有告诉它以这种方式订购它们(所以它没有),但我不知道如何实现它。

感谢您的宝贵时间,

赛斯

【问题讨论】:

【参考方案1】:

你可以使用the field() function:

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

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

附注:您可能应该使用准备好的语句,而不是连接查询字符串中的值(如果您的值来自代码外部,这是必须具备的)。

【讨论】:

以上是关于按特定顺序选择特定行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

插入..按[重复]顺序选择

按特定表顺序选择三个表

按字段名称在新的 JS 过滤数组中移动 JS 数组行

如果有 id 重复,则选择所有行,然后选择具有特定类型的(2 个)

Postgresql 按日期和特定 ID 选择前 x 行

MySQL:按顺序插入选择