如果达到max qty产品则停止销售(MySQL数据库)

时间:2016-10-18 19:56:23

标签: php mysql

我有一个非常普及的产品,只有100个可用,但1000多人同时想要它。所以他们几乎在同一时间选择产品并按下按钮"订单!"。但是,只有100种产品可以卖给人们订购,处理负载的最佳方法是什么?

我正在使用PHP&的MySQL。

我现在正在使用的选项(非常简单的例子,不要介意sql注入等等。真正的SQL是安全的):

<?php

$product_id_selected = $_GET['product_id']; // orderd product
$qty_selected = $_GET['qty']; // qty of orderd product

$max_qty = "Select `max_qty` FROM `Product` WHERE `id_id` = 1";
$bought = "Select count(*) as `count` FROM `Orders` WHERE `product_id` = ".$product_id_selected;

$left = $max_qty - $bought;


if($left >= $qty_selected){
 // Full order can be placed

}elseif($left > 0){
   $qty_selected = $left; // only the available left are selected
}else{
   $qty_selected = 0;
}
if($qty_selected>0){
   for($i=0;$i<$qty_selected;$i++){
      $insert = "INSERT INTO `Orderds` (`product_id`) VALUES ($product_id_selected)";
   }
}

?>

MySQL示例数据库(真实数据库更复杂):

产品

+-----------------------------------+
| id | product_name       | max_qty |
+----+--------------------+---------+
| 1  | Very Populair item | 100     |
+-----------------------------------+

订单

+-------------------------+
| id | product_id | payed |
+----+------------+-------+
| 1  | 1          | 1     |
+----+------------+-------+

所以我的问题是,有更好更安全的方法吗?也许在MySQL中使用触发器,所以当订单生成时它会在数据库中的计数器中加1?

我希望有人能找到更好的解决方案,因为我的工作量并不大。

0 个答案:

没有答案