有什么问题在while循环?(Is something wrong in the while loo

2019-10-29 01:17发布

我有一个store_credits_orders表

和订单表。

我需要的输出与此类似,但基于Store Credit Order Date and Time以及Store Order Date and Time

我至今尝试过的代码:

<?php
$table = '';
$queryToGetStoreCredit = "SELECT * FROM store_credits_orders WHERE SCO_CustEmailAdd = '".$_SESSION["Customer"]["email"]."'";
$validate->Query($queryToGetStoreCredit);
if ($validate->NumRows() >= 1) {
    while ($rows_sco = $validate->FetchAllDatas()) {
        $used = $i = 0;
        $table .= '<tr>';
        $table .= '<td>'.$rows_sco["SCO_OrderCode"].'</td>';
        $table .= '<td>--</td>';
        $table .= '<td>'.$rows_sco["SCO_OrderDate"].'</td>';
        $table .= '<td>--</td>';
        $table .= '<td>'.$rows_sco["SCO_Purchase_Amount"].'</td>';
        $table .= '<td>'.$rows_sco["SCO_Credit_Alloted"].'</td>';
        $table .= '<td>'.$used.'</td>';
        $table .= '<td>'.( $rows_sco["SCO_Credit_Alloted"] - $used ).'</td>';
        $table .= '</tr>';

        $validate2 = new Validation();
        $queryToGetOrder = "SELECT * FROM orders WHERE CustEmailAdd = '".$rows_sco["SCO_CustEmailAdd"]."'";
        $validate2->Query($queryToGetOrder);
        while ($row = $validate2->FetchAllDatas()) {
            $table .= '<tr>';
            $table .= '<td>--</td>';
            $table .= '<td>'.$row["OrderCode"].'</td>';
            $table .= '<td>--</td>';
            $table .= '<td>'.$row["OrderDate"].'</td>';
            $table .= '<td>--</td>';
            $table .= '<td>--</td>';
            $table .= '<td>'.$row["AppliedCredits"].'</td>';
            $table .= '<td>'.($rows_sco["SCO_Credit_Alloted"] - $row["AppliedCredits"]).'</td>';
            $table .= '</tr>';
        }
    }
}
?>

我想实现的是,每当有购买store_credits,信息将被插入在store_credits_orders表。 现在,当同一个用户来了,下单和赎回store_credits(小于等于,他在他的帐户),将有比插入订单表中的其他数据库没有更新。

但是,当用户登录时,他应该能够看到,当他已经购买了store_credits和/或当他赎回store_credits。 所有这些事件应该由哪个事件发生第一次下令,无论购买或赎回。

Answer 1:

我跟@ user3514160,我得到了清晰,他想的有什么。 基本上数据被正确插入。 只有他想的是要表现出正确的方法的数据。

您的查询应该是这样的

(SELECT
  SCO_Id,
  SCO_OrderCode,
  SCO_CustEmailAdd,
  SCO_Purchase_Amount,
  SCO_Credit_Alloted,
  SCO_OrderDate,
  SCO_OrderIP,
  null AS OrderId,
  null AS OrderCode,
  null AS CustEmailAdd,
  null AS AppliedCredits,
  null AS OrderDate,
  'store_credits_orders' AS tableName
FROM `store_credits_orders` AS credits_orders WHERE `SCO_CustEmailAdd` = '".$_SESSION["Customer"]["email"]."')
UNION
(SELECT
  OrderId,
  OrderCode,
  CustEmailAdd,
  AppliedCredits,
  OrderDate
  null AS SCO_Id,
  null AS SCO_OrderCode,
  null AS SCO_CustEmailAdd,
  null AS SCO_Purchase_Amount,
  null AS SCO_Credit_Alloted,
  OrderDate AS SCO_OrderDate,
  null AS SCO_OrderIP,
  'store_orders' AS tableName
FROM `store_orders` AS orders WHERE `SCO_CustEmailAdd` = '".$_SESSION["Customer"]["email"]."')
ORDER BY `SCO_OrderDate` ASC

这需要得到一个结果的所有行。 我们做到这一点与MySQL的UNION 。

UNION需要两个表有有相同的名字列相同。 这就是为什么我们添加空列用null AS columnName

PHP与查询

<?php
$table = '<table>';

// Query to get all rows from both tables
$queryToGetStoreCredit = 
"(SELECT
  SCO_Id,
  SCO_OrderCode,
  SCO_CustEmailAdd,
  SCO_Purchase_Amount,
  SCO_Credit_Alloted,
  SCO_OrderDate,
  SCO_OrderIP,
  null AS OrderId,
  null AS OrderCode,
  null AS CustEmailAdd,
  null AS AppliedCredits,
  null AS OrderDate,
  'store_credits_orders' AS tableName
FROM `store_credits_orders` AS credits_orders WHERE `SCO_CustEmailAdd` = '".$_SESSION["Customer"]["email"]."')
UNION
(SELECT
  OrderId,
  OrderCode,
  CustEmailAdd,
  AppliedCredits,
  OrderDate
  null AS SCO_Id,
  null AS SCO_OrderCode,
  null AS SCO_CustEmailAdd,
  null AS SCO_Purchase_Amount,
  null AS SCO_Credit_Alloted,
  OrderDate AS SCO_OrderDate,
  null AS SCO_OrderIP,
  'store_orders' AS tableName
FROM `store_orders` AS orders WHERE `SCO_CustEmailAdd` = '".$_SESSION["Customer"]["email"]."')
ORDER BY `SCO_OrderDate` ASC";

$validate->Query($queryToGetStoreCredit);
if ($validate->NumRows() >= 1) {
    // Starting balance. This could be some other number, for example if viewing some certain period of orders etc.
    $balance = 0;
    while ($row = $validate->FetchAllDatas()) {

        // Add to balance
        if($row['tableName'] == 'store_credits_orders' && (int)$row['SCO_Credit_Alloted'] > 0){
          $balance += (int)$row['SCO_Credit_Alloted']
        }
        // Remove from balance
        else if($row['tableName'] == 'store_orders' && (int)$row['AppliedCredits'] > 0){
          $balance -= (int)$row['AppliedCredits'];
        }

        $table .= '<tr>';
        $table .= '<td>'.$row["SCO_OrderCode"].'</td>';
        $table .= '<td>'.$row["OrderCode"].'</td>';
        $table .= '<td>'.(($row['tableName'] == 'store_credits_orders') ? $row["SCO_OrderDate"] : '').'</td>';
        $table .= '<td>'.$row["OrderDate"].'</td>';
        $table .= '<td>'.$row["SCO_Purchase_Amount"].'</td>';
        $table .= '<td>'.$row["SCO_Credit_Alloted"].'</td>';
        $table .= '<td>'.$row["AppliedCredits"].'</td>';
        $table .= '<td>'.$balance.'</td>';
        $table .= '</tr>';
    }
}

$table .= '</table>';

echo $table;
?>

让我知道,如果有一些问题。



文章来源: Is something wrong in the while loop?