外部条件または追加された 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 は 2 番目の位置の 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'];
}