gpt4 book ai didi

php - 存储客户产品的最佳方法

转载 作者:行者123 更新时间:2023-11-29 12:09:19 25 4
gpt4 key购买 nike

嗯,我有两种方法来存储客户购买的产品。但我想知道我应该使用哪个,所以我来这里是为了获取一些意见。
第一种方法是:

try
{
$connection = new PDO("mysql:host={$HOST};dbname={$DB_NAME}", $USERNAME, $PASS);
}

$connection->beginTransaction();
$sql = "INSERT INTO orders (customer_id, customer_name, order_value, order_date)
VALUES (?, ?, ?, ?)";

$query = $connection->prepare($sql);
$query->execute(array
(
$user_id,
$user['user_name'],
$order_value,
$date
));

$id_of_respective_order = $connection->lastInsertId();

$sql = "INSERT INTO purchased_products (order_id, product_name, product_price, quantity)
VALUES (?, ?, ?, ?)";

$query = $connection->prepare($sql);

foreach($_SESSION['cart'] as $product)
{
$query->execute(array
(
$id_of_respective_order,
$product['product_name'],
$product['product_price'],
$product['quantity']
));
}

$connection->commit();

现在让我们解释一下:通过上面的方法,我将订单插入到一个表中,将购买的产品插入到另一个表中,然后我可以使用 在 HTML 表中显示任何客户购买的每一件产品我在 purchased_products 表中拥有的外键 order_id

现在我有了第二种方法:

try
{
$connection = new PDO("mysql:host={$HOST};dbname={$DB_NAME}", $USERNAME, $PASS);
}

$connection->beginTransaction();
$sql = "INSERT INTO orders (customer_id, customer_name, order_value, order_date, purchased_products)
VALUES (?, ?, ?, ?, ?)";

$purchased_products = null;

foreach($_SESSION['cart'] as $product)
{
$purchased_products .= "
<table>
<tr>
<th>Product Name</th>
<th>Product Price</th>
<th>Quantity purchased</th>
</tr>
<tr>
<td>{$product['product_name']}</td>
<td>{$product['product_price']}</td>
<td>{$product['quantity']}</td>
</tr>
</table>
";
}

$query = $connection->prepare($sql);
$query->execute(array
(
$user_id,
$user['user_name'],
$order_value,
$date,
$purchased_products
));

$connection->commit();

通过此方法,我只需使用表键 purchased_products 即可直接在表中显示产品。什么方法最好?如果我使用第一个,我可以对该值进行操作,但是......我一直在研究并了解到插入是一个瓶颈。购买 ID 是自动分配的,然后我使用 lastInsertionId 来确定哪些产品属于上一次购买。但这是否意味着如果两个人同时购买就会出现错误呢?由于瓶颈,必须等待操作完成,否则我不会出现问题?我可以信任单独的插入还是应该将所有内容插入一个表中作为第二种方法?

最佳答案

第一个版本通常被认为是关系数据库中的最佳方法。您可能需要考虑仅包含对 Products 表的引用,而不是包含 OrderProducts 中有关产品的所有信息(比 PurchasedProducts 更好的名称) )。但是,这些值可能会随着时间而变化,因此也有充分的理由包含详细信息。

第二个版本通常不适用于这种情况。从数据库的角度来看,ordered_products 列是一个 BLOB —— 也就是说,它没有有用的内部结构。我的意思是,通过努力,您可以使用字符串或 XML 函数将其解析出来。但您应该真正将其视为二进制类型。

为什么?通常,人们想问以下类型的问题:

  • 数据库中购买次数最多的产品是什么?
  • 产品 X 的平均价格是多少?
  • 哪些客户同时购买了 X 和 Y(尽管订单可能不同)?
  • 根据订单中的产品计算,订单的总价是多少?

所有这些都可以通过单独的表 OrderProducts 在数据库中更轻松地回答。您应该利用数据库功能并使用联结表。

关于php - 存储客户产品的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com