0

私はこれに何時間も費やしましたが、理解できません。以下の while ループは、同じレコード (Sub-Total:) を 3 回返します。私のテーブル構造については、下の画像を参照してください。また、これは OsCommerce のインストールであるため、「tep_.....」関数は OsCommerce のものです。ここで OsCommerce 以外のソリューションをいくつか試したので、それらが問題だとは思いません。

$ot_query = tep_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $order_id . "'");
if (tep_db_num_rows($ot_query)) {
    while ($ot = tep_db_fetch_array($ot_query)) {
        $order_total_sql = tep_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $order_id . "'");
        $order_total_result = tep_db_fetch_array($order_total_sql);
        $email_order .= strip_tags($order_total_result['title']) . ' ' . strip_tags($order_total_result['text']) . "\n";
    }
}

テーブル構造...

orders_total_id   |   orders_id   |   title   |   text   |   value   |   class   |   sort_order

同じ orders_id を持つ 3 つの異なる行がありますが、orders_total_id が異なり、もちろん他のデータも異なります。

- - アップデート - -

追加する

echo "<pre>".print_r($ot, 1)."</pre>\n"; 

while ($ot = tep_db_fetch_array($ot_query)) {の下で、次の結果が生成されました...

Array
(
    [orders_total_id] => 4149
    [orders_id] => 1280
    [title] => Sub-Total:
    [text] => $49.99
    [value] => 49.9900
    [class] => ot_subtotal
    [sort_order] => 1
)
Array
(
    [orders_total_id] => 4150
    [orders_id] => 1280
    [title] => Gift Certificates (-) :
    [text] => $37.00
    [value] => 37.0000
    [class] => ot_gv
    [sort_order] => 3
)
Array
(
    [orders_total_id] => 4151
    [orders_id] => 1280
    [title] => Total:
    [text] => $12.99
    [value] => 12.9900
    [class] => ot_total
    [sort_order] => 12
)
4

3 に答える 3

2

ここでの問題は、while()設定後の行にあります$order_total_sql$ot1 つのレコードだけを使用して SELECT を実行していますが、それは前の SELECT から保存したレコードではありません。間違ったデータに基づいて出力しています。

したがって、答えは... $ot2 番目の SELECT を作成する代わりに使用します。

$ot_query = tep_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $order_id . "'");
if (tep_db_num_rows($ot_query)) {
    while ($ot = tep_db_fetch_array($ot_query)) {
        $email_order .= strip_tags($ot['title']) . ' ' . strip_tags($ot['text']) . "\n";
    }
}
于 2012-07-18T14:29:43.613 に答える
0

メインループ内で$order_idを変更していないため、内部クエリが変更されることはありません。常に同じレコードを毎回フェッチします。あなたは次のようなものを持っているべきではありません...

while ($ot = tep_db_fetch_array($ot_query)) {
   $order_id = $od['order_id'];
   $order_total_sql = etc...
   etc...
}

もちろん、それはあなたが同じクエリを2回実行している理由に答えません...あなたはあなたが「内側」であるのとまったく同じ構造「外側」を選択しています...

于 2012-07-18T01:00:12.850 に答える
0

同じレコードを選択していますorders_id:

$ot_query = tep_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $order_id . "'");

ご覧のとおりorders_id、注文の ID であり、orders_total_id小計レコードの ID です。あなたの例では:

Sub-Total: $49.99
Gift Certificates (-) : $37.00

49.99 - 37.00 = 12.99 なので:

Total: $12.99
于 2012-07-18T14:26:47.150 に答える