php实现小米抢购功能

如题所述

  主要解决方法:
  1.需要把实体店对应的优惠券数量以记录的形式呈现,表1:Max_Table( ID, storeID,apply_count ,apply_code)。表2:apply_form(apply_code,store_id,phone_numbe)该表主要记录哪个用户用什么手机号码申请了优惠券,优惠券码是什么。
  2.创建数据库时要使用InnoDB存储引擎
  3.在数据库中创建存储过程,在存储过程中使用事务,在事务中要先查询是否发放完毕,为避免多进程同时访问某记录中的数量而引起的问题,我使用for update。使用该语句,若事务A访问访问该记录时,事务B会阻塞,直到事务A完毕后,从而达到了<并转串>的操作。
  以下是解决该问题的核心存储过程,其中有2个入参,1个出参。

  CREATE DEFINER=`sa`@`localhost` PROCEDURE `p_apply_code`(IN `p_store_id` varchar(30), IN `p_phone_number` varchar(20),OUT return_val varchar(30))
BEGIN
#Routine body goes here...
declare p_apply_count int(4) default 0;
declare encode_apply_code varchar(16) default '';

start transaction ;//开始事务
SELECT apply_count into p_apply_count FROM max_table WHERE store_id=p_store_id for update;
if (p_apply_count =0 ) THEN
insert into max_table(store_id,apply_count) values(p_store_id,0);
end if;
IF( p_apply_count<=9) THEN

set encode_apply_code='优惠券码的生成规则',
insert into apply_form(apply_code,store_id,phone_number) values(encode_apply_code,p_store_id,p_phone_number);
update max_table set apply_count=apply_count+1 where store_id=p_store_id;
set result=encode_apply_code2;
END IF;

set return_val=result ;
commit; //提交事务,同时释放for update锁

END

4.PHP调用MySQL存储过程

$sql = 'call p_apply_code('."'$store_id',"."'$phonenumber',"."@return_val".'); ';
$db->query($sql);
$apply_code=$db->getOne('select @return_val');
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-21
说的是秒杀功能把, 最简单方法 数据库定义个字段控制 可设定数字 购买成功一次(交易成功代码段里 给该字段数字-1 0则空了。) 至于F码什么的 也可用此方法 一个字段记录 密匙 事先生成 用MD5 或者时间+字母随机都可以 自己定义 购买前匹配该密匙 正确则购买 使用后改变该字段值就行。追问

如果卖10W台手机,有100W人在抢,怎么判断谁抢到了

追答

这就要看网速了 还要看你服务器要能承受的住瞬间访问量 只要数据库不崩溃 定义秒杀商品数量10W 一直递减就行 其他程序就跟普通购买商品流程一样 只是多了个限制10W 抢到的人就是购买商品成功的!

追问

不明觉厉啊

追答

是一种思路 多接触接触数据库 你就懂了- -。。

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网