0

外部条件または追加された 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'];
}
4

1 に答える 1

1

技術的にはできませんが、クエリがそれほど悪くない場合は、これを行うコードを書くことができます。

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

いくつかの PHP を組み合わせてクエリを結合すると、非常に簡単に機能します。

ユニオン クエリを実行すると、クエリ自体の順序でデータが返されます。

于 2013-09-04T08:52:55.300 に答える