按添加的 WHERE 条件的顺序对 SQL 输出进行排序


Sort SQL output by the order of added WHERE conditions

如何按外部条件或例如添加的 WHERE 条件的顺序对 SQL 输出中的值进行排序?

首先,我使用"json_decode foreach 循环"生成多个 ID

$itemid = '';
$arr = json_decode($string,true);
foreach($arr['feed']['entry'] as $val)
{
$itemid .= " OR `item_id` = ".$val['id']['att']['ix:id'];
}

输出例如(简化)

`item_id` = 2
OR `item_id` = 3
OR `item_id` = 1

在这里,输出的顺序对我来说很重要。 2 是第一个位置的 ID,3 是第二个位置的 ID,依此类推。

在下一步中,我将使用 MySQL 语句中的所有 ID 来提取每个 ID 的信息

$sql = "
SELECT *
FROM `itemtable`
WHERE $itemid
";

哪个更具可读性:

$sql = "
SELECT *
FROM `itemtable`
WHERE `item_id` = 2
OR `item_id` = 3
OR `item_id` = 1
";

SQL 输出现在按 ID ASC 的顺序排列

+-------+-----------+
|   ID  |   INFO    |
+-------+-----------+
|   1   | something |
+-------+-----------+
|   2   | something |
+-------+-----------+
|   3   | something |
+-------+-----------+

但是我需要按照json_decode生成的ID顺序排列的信息:

+-------+-----------+
|   ID  |   INFO    |
+-------+-----------+
|   2   | something |
+-------+-----------+
|   3   | something |
+-------+-----------+
|   1   | something |
+-------+-----------+

我正在同一个 php 脚本中使用另一个 foreach 循环输出接收到的数据:

$output = '';
foreach ($xpdo->query($sql) as $row) {
        $output .=  $row['ID']
            .$row['INFO']
        ."</br>";
}
return $output;

如何按json_decode顺序排列输出?实际上,我不介意在SQL语句或PHP中进行排序。

编辑:来自Fluffeh的解决方案

将json_decode修改为 + 为第一个条目添加 IF 条件,以删除此处的"全部并集"。

$itemid = '';
$arr = json_decode($string,true);
foreach($arr['feed']['entry'] as $val)
{
$itemid .= "union all 
SELECT * FROM `itemtable` 
WHERE `item_id` = ".$val['id']['att']['ix:id'];
}

从技术上讲,您不能,但如果查询不是太糟糕,您可以编写一些代码来执行此操作:

$sql = "
SELECT *
    FROM `itemtable`
WHERE $itemid1
union all
SELECT *
    FROM `itemtable`
WHERE $itemid2
";

如果你把一些PHP连接在一起,它将很容易工作。

运行联合查询时,将按查询本身的顺序返回数据。