我有一个用户可以订购多个商品的系统,假设用户向购物车添加了3个商品并提交订单,然后每个商品都插入到订单表中,但所有这些商品的订单号都相同。以下。
order_id product_id order_no
10895 ACP1001 WKO00000003659
10894 ACP1000 WKO00000003659
10893 ACP1001 WKO00000003658
10892 ACP1000 WKO00000003658
我从最后插入的订单号生成此order_no,因为我使用我的php脚本生成订单号。除非有同步订单,否则一切都很完美。如果来自不同用户的同时订单,则为所有用户分配相同的订单号。我怎样才能克服这种情况呢?
答案 0 :(得分:1)
您可以在Php中使用会话。在会话中,每个用户都会有order_id。您也可以使用cookies。您可以轻松地为用户维护会话变量。此会话变量包含order_id值。 什么是最新的order_id,存储到数据库。当新用户到来然后从数据库中读取该订单ID并递增它然后分配给用户。更新到数据库之后。
什么是session-
使用应用程序时,打开它,进行一些更改,然后 然后你关闭它。这很像一个Session。电脑知道谁 你是。它知道您何时启动应用程序以及何时结束。但 在互联网上有一个问题:网络服务器不知道谁 你是或你做什么,因为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
答案 1 :(得分:1)
用户,任何用户,都会创建订单。 db在订单表中插入一行,其中order_id int auto_increment primary key
保证与下一个人不同。
在此order_id下,您可以将所有商品/产品购买挂在订单行表格中(订单明细)。
在order_id级别重置错误的可能性为零。
现在,如果你必须有一些带有WKO或其他前缀的派生或其他自定义其他列,那也是可能的。但主要的是,order_id可以避免与其他人发生冲突。
阅读this for mysqli,阅读this for PDO。
Mysql Using AUTO_INCREMENT