while循环多次获得相同的记录

时间:2012-07-17 23:39:42

标签: php while-loop

我已经花了这么多时间,我无法理解。我的while循环返回相同的记录(Sub-Total :)三次。请参阅下面的图片了解我的桌面结构。此外,这是在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,但order_total_id不同,当然其他数据也不同。

---更新---

添加

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

($ 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
)

3 个答案:

答案 0 :(得分:2)

此处的问题出现在while()之后 - 设置$order_total_sql的问题。你只使用一条记录进行SELECT - 它不是你从前一个SELECT中存储在$ot中的那条记录。您的输出基于错误的数据。

所以答案是......使用$ot而不是制作第二个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";
    }
}

答案 1 :(得分:0)

您没有在主循环中更改$ order_id,因此您的内部查询永远不会更改 - 您每次都会获取相同的记录。难道你不应该有... ...

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

当然,这并没有回答为什么你要运行两次相同的查询...你选择完全相同的“外部”结构,因为你“ind'”......

答案 2 :(得分: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