Mysql

在 php mysqli 的訂單表中為訂購的產品生成從 0 到依此類推的發票編號

  • September 2, 2019

我正在嘗試在訂單表中生成發票編號,例如,如果使用者選擇 1 個或多個產品並將其添加到購物車然後下訂單,則發票編號應該在我們的訂單表中根據產品在多行中的 1 個訂單相同。我正在使用函式mt_rand();,但它隨機生成。我想生成從 0 到等等的數字。比如,1、2、3、4、5、6、7等等。

我也試過這個來生成發票號碼。 $i++

$squery = "SELECT * FROM cart WHERE user_id = '$user_id'";
$sresult = $this->db->select($squery);
if($sresult){
   $totalPrice = 0;
   $i = 0;
   while($svalue = $sresult->fetch_assoc()){
       $i++;
       $pro_id = $svalue['pro_id'];
       $pro_name = $svalue['pro_name'];
       $quantity = $svalue['quantity'];
       $pro_price = $svalue['pro_price'] * $quantity;
       $pro_image = $svalue['pro_image'];
       $query = "INSERT INTO orders(user_id, pro_id, invoice_no, pro_name, status, date) "
               . "VALUES('$user_id', '$pro_id', '$i', '$pro_name', 'processing', NOW())";
       $result = $this->db->insert($query);
       if($result){
           header("location: orders-list.php");
       } else {
           $msg = "<div class='alert alert-danger'>Something's went wrong. Please try again.</div>";
           return $msg;
       }
   }
   return true;
}

但它不會在 1 個訂單的多個訂購產品行中插入相同的數字。請幫助我如何生成從 0 到等等的發票編號。

我將使用 MySQL 數據庫使用自填充AUTO_INCREMENT整數列為您計算訂單號。

將您的訂單表分成兩個不同的表。一個用於訂單頂行詳細資訊(例如訂單號、客戶詳細資訊),第二個用於訂單詳細資訊(項目、數量、項目 ID 等)。

這樣您就可以在第一個表中插入一行來“創建”訂單。然後您可以查詢數據庫以獲取此訂單的 OrderNumber。然後使用它來填充包含訂單詳細資訊的表格。

這裡有一個非常粗略的例子。

然後,您可以使用此查詢獲取訂單 ID

select OrderNumber from Orders where CustomerID = 57
order by OrderDate DESC limit 1;

並使用此獲取所有訂單項目:

select * from OrderDetails where ordernumber = 1;

要在一個請求中獲取所有資訊,假設您有 OrderNumber,可以這樣完成:

Select o.OrderNumber
 ,o.CustomerID
 ,o.BillingAddressID
 ,o.OrderDate
 ,o.OrderStatus
 ,od.pro_id
 ,od.pro_name
 from Orders o
 INNER JOIN OrderDetails od
   on o.OrderNumber = od.OrderNumber
     where o.OrderNumber = 1

在不了解您確切的程式碼工作流程和客戶旅程的情況下,很難說什麼最有效。你必須弄清楚這一點。

我絕對建議您閱讀有關規範化數據的內容,以便您可以根據需要創建最佳資料結構。

引用自:https://dba.stackexchange.com/questions/246733