[英]How to generate next increment number with concurrent user in php&mysql?
我有一個系統,用戶可以訂購多個項目,假設用戶將3個項目添加到購物車並提交訂單,然后每個項目都插入到訂單表中,但所有這些項目的訂單號都相同。 前下面。
order_id product_id order_no
10895 ACP1001 WKO00000003659
10894 ACP1000 WKO00000003659
10893 ACP1001 WKO00000003658
10892 ACP1000 WKO00000003658
我正在從最后插入的訂單號生成此order_no,因為我使用我的php腳本生成了訂單號。 除非同時有訂單,否則一切都可以正常工作。 如果同時有來自不同用戶的訂單,那么會將相同的訂單號分配給所有用戶。 我該如何克服這種情況?
您可以在Php中使用會話。 在會話中,每個用戶將具有order_id。 您也可以使用cookie 。 您可以輕松維護用戶的會話變量。 該會話變量包含order_id值。 什么是最新的order_id,存儲到數據庫。 當新用戶到來時,請從數據庫中讀取該訂單ID並對其遞增,然后將其分配給用戶。 更新到數據庫后。
什么是會話-
使用應用程序時,請先打開它,進行一些更改,然后再關閉它。 這很像一個會話。 電腦知道您是誰。 它知道何時啟動應用程序以及何時終止。 但是在Internet上存在一個問題:Web服務器不知道您是誰或做什么,因為HTTP地址不保持狀態。
會話變量通過存儲要在多個頁面上使用的用戶信息(例如,用戶名,喜歡的顏色等)來解決此問題。 默認情況下,會話變量將持續到用戶關閉瀏覽器為止。
所以; 會話變量保存有關一個用戶的信息,並且可用於一個應用程序中的所有頁面。
我僅舉一個例子。 您的情況可能有所不同。
mysql > desc order_id_generate;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+---------+------+-----+---------+----------------+
<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_SESSION['order_id']) && !empty($_SESSION['order_id'])) {
echo "Already ordered set and not empty ! ".$_SESSION[`order_id`];
}
else {
$query = "INSERT INTO order_id_generate VALUES ()";
$mysqli->query($query);
$temp=$mysqli->insert_id;
// set the new order
$_SESSION['order_id']=$temp;
echo "Ordered set and not empty ! ".$_SESSION[`order_id`];
}
$conn->close();
?>
</body>
</html>
更多@ w3school和PHP mannual
一個用戶,任何用戶,都會創建一個訂單。 數據庫在orders表中插入一行,該行的內容類似於order_id int auto_increment primary key
保證與下一個家伙不同。
在這個order_id下,您將所有購買的商品/產品掛在訂單行表(訂單明細)之類的地方。
在order_id級別將其與重復項搞混的可能性為零。
現在,如果您必須使用WKO或其他前綴添加一些派生或自定義的其他列,那也是可能的。 但是最主要的是,order_id可以防止與其他對象沖突。
MySQL 使用AUTO_INCREMENT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.