如何通过外部条件或例如添加的 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 条件以删除此处的“union all”。
$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'];
}