如何通过外部条件或例如SQL输出对SQL输出中的值进行排序添加WHERE条件的顺序?
首先,我使用“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个,依此类推。
在下一步中,我使用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'];
}
答案 0 :(得分:1)
你在技术上不能,但如果查询不太糟糕,你可以写一些代码来做到这一点:
$sql = "
SELECT *
FROM `itemtable`
WHERE $itemid1
union all
SELECT *
FROM `itemtable`
WHERE $itemid2
";
如果你把一些PHP加在一起加入查询,它将非常容易。
运行联合查询时,数据将按查询本身的顺序返回。