複数の mysql SELECT クエリを回避するために、SELECT を foreach ループから外そうとします。
クエリは
SELECT o.orders_id,
o.date_purchased,
o.orders_status,
ot.text AS order_total,
os.orders_status_name
FROM " . TABLE_ORDERS . " o
JOIN " . TABLE_ORDERS_TOTAL . " ot ON (o.orders_id = ot.orders_id AND ot.class = 'ot_total')
JOIN " . TABLE_ORDERS_STATUS . " os ON (o.orders_status = os.orders_status_id AND os.language_id = " . (int)$_SESSION['languages_id'] . ")
WHERE o.customers_id = " . (int)$_SESSION['customer_id'] . "
ORDER BY orders_id DESC
その結果、 $history_result['RESULT'] という配列が得られ、次のようになります
Array
(
[0] => Array
(
[orders_id] => 309
[date_purchased] => 2013-10-02 15:49:54
[orders_status] => 1
[order_total] => 9,00 €
[orders_status_name] => Offen
)
[1] => Array
(
[orders_id] => 308
[date_purchased] => 2013-10-02 15:39:54
[orders_status] => 1
[order_total] => 9,00 €
[orders_status_name] => Offen
)
[2] => Array
(
[orders_id] => 307
[date_purchased] => 2013-10-02 15:33:48
[orders_status] => 1
[order_total] => 9,00 €
[orders_status_name] => Offen
)
)
次の foreach-loop は、次の MySql-Query です。
foreach ($history_result['RESULT'] as $history) {
$trackings = $db->result("-- 03 account_history_info.php
SELECT o.ortra_parcel_id,
c.carrier_tracking_link,
c.carrier_name
FROM " . TABLE_ORDERS_TRACKING . " o
JOIN " . TABLE_CARRIERS . " c ON o.ortra_id = c.carrier_id
WHERE ortra_order_id = " . $history['orders_id']
);
}
次のような SQL ステートメントを作成できるように、配列要素「orders_id」に直接アクセスするにはどうすればよいですか
$trackings = $db->result("-- 03 account_history_info.php
SELECT o.ortra_parcel_id,
c.carrier_tracking_link,
c.carrier_name
FROM " . TABLE_ORDERS_TRACKING . " o
JOIN " . TABLE_CARRIERS . " c ON o.ortra_id = c.carrier_id
WHERE ortra_order_id IN = " . implode(',', $fooArray)
);