0
私は、結果を配列に入れることを心がけています。 order
とorderdetails
:LEFT JOIN mysqlクエリを使用してPHPで簡単に結果を分割するには?
SELECT orders.*, order_details.* FROM `webshop_orders`
LEFT JOIN `order_details`
ON `orders`.`order_id` = `order_details`.`f_order_id`
WHERE `orders`.`f_site_id` = $iSite_id AND `orders`.`order_id` = $iOrder_id;";
私はこのデータを返すAN次の形式の配列でそれらを配置する方法を発見しようとしています:
$aOrders = array(
0=>array(Orders.parameter1=>value, orders.parameter2=>value, orders.parameter3=>value, 'orderdetails'=>array(
array(Orderdetails.parameter1=>value, orderdetails.parameter2=>value)));
クエリは、すべての二つのテーブルのデータを返します。
私は現在、アソシエート配列としてすべての結果を返し、2つのキー配列を使ってその名前に基づいてすべての変数を手動で分割しますが、これは非常に労働集約的ですね。
while($aResults = mysql_fetch_assoc($aResult)) {
$i++;
foreach($aResults as $sKey=>$mValue){
if(in_array($sKey, $aOrderKeys){
$aOrder[$i][$sKey] = $mValue;
} else {
$aOrder[$i]['orderdetails'][$sKey] = $mValue;
}
}
}
EDIT:上記の機能は、複数の注文詳細を考慮していませんが、その機能は一例です。
簡単な方法がありますか、これについてはより良いクエリを使用できますか?あなたの配列を埋めるためにループしながら、次のように使用することができます
2つのアレイが必要な場合は、データベースに2回移動します。注文のために1回、それらの注文の詳細のために1回。あなたが修正しようとしているスプリットの問題を引き起こして左に参加することによって。 – xQbert
さて、私は、パフォーマンスの観点から、PHPとMySQLに2つのクエリの代わりに1つのクエリを処理させることが2つのクエリより優れていると推測しましたか? – Abayob
個人的には、私は仕事が必要なデータセットを手に入れたことが分かりました。ここでの完全なユースケースを知らないと、どのアプローチが優れているかは言えません。しかし、あなたが2つの配列を設定しようとしているとすれば、私は2回の移動を行います。しかし、なぜ2つの配列が必要ですか? 1つのデータセットにレンダリングする必要があるものがすべて含まれている場合、なぜ2つの配列に分割するのですか?コントロールブレークロジックを使用して、「注文」を繰り返してから、「変更する」ときに新しいヘッダーを書き出し、詳細を繰り返し実行することができます。 (基本的に "注文"の情報は変更されるまで無視されます) – xQbert