Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果产品达到最大数量,停止销售(MySQL数据库)_Php_Mysql - Fatal编程技术网

Php 如果产品达到最大数量,停止销售(MySQL数据库)

Php 如果产品达到最大数量,停止销售(MySQL数据库),php,mysql,Php,Mysql,我有一个非常流行的产品,只有100个可用,但1000多人同时想要它。因此,他们几乎同时选择产品并按下“订单”按钮。但是,只有100种产品可以出售给订购的人,处理负载的最佳方式是什么 我正在使用PHP和MySQL 我现在使用的选项(非常简单的示例,不介意sql注入等。真正的sql是安全的): 订单: +-----------------------------------+ | id | product_name | max_qty | +----+------------------

我有一个非常流行的产品,只有100个可用,但1000多人同时想要它。因此,他们几乎同时选择产品并按下“订单”按钮。但是,只有100种产品可以出售给订购的人,处理负载的最佳方式是什么

我正在使用PHP和MySQL

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

订单

+-----------------------------------+
| id | product_name       | max_qty |
+----+--------------------+---------+
| 1  | Very Populair item | 100     |
+-----------------------------------+
+-------------------------+
| id | product_id | payed |
+----+------------+-------+
| 1  | 1          | 1     |
+----+------------+-------+
所以我的问题是,有没有更好更安全的方法?可能在MySQL中使用触发器,所以当下订单时,它会向数据库中的计数器添加1


我希望有人有更好的解决方案,因为我的解决方案没有太多的负载。

为什么不更改数量列并减少它?我会使用另一个表为某人锁定产品。类似于票务系统的工作原理。当他们添加到购物车时,你们从可用的库存中提取一个,并在到期时将其放入存放台。要么用户购买了它,然后进入订单表,不在库存中,要么它过期并被添加回库存中。然后,您将运行一个事件或进程来检查要放回的过期产品。从select查询中的计数减去订单。你的恶意代码BTWI会建议你使用锁表和会话,以便将一个表锁定x个时间量,比如说2分钟,因此每次用户在购物车中添加一个产品时,你只需将一个条目添加到另一个锁表中,锁表的每一行都附加到一个唯一的顺序。如果订单完成,那么在关闭订单之前,您只需选择锁表中具有唯一id的所有产品,并从主表中减去每个产品的购买金额,否则订单已被取消,只需删除锁定表中的行,为什么不更改数量列并减少它?我会使用另一个表为某人锁定产品。类似于票务系统的工作原理。当他们添加到购物车时,你们从可用的库存中提取一个,并在到期时将其放入存放台。要么用户购买了它,然后进入订单表,不在库存中,要么它过期并被添加回库存中。然后,您将运行一个事件或进程来检查要放回的过期产品。从select查询中的计数减去订单。你的恶意代码BTWI会建议你使用锁表和会话,以便将一个表锁定x个时间量,比如说2分钟,因此每次用户在购物车中添加一个产品时,你只需将一个条目添加到另一个锁表中,锁表的每一行都附加到一个唯一的顺序。如果订单完成,那么在关闭订单之前,您只需选择具有唯一id的锁表的所有产品,并从主表中减去每个产品的购买金额,否则订单已取消,只需删除锁表中的行即可
+-------------------------+
| id | product_id | payed |
+----+------------+-------+
| 1  | 1          | 1     |
+----+------------+-------+