秒杀技术实现细节 PHP

1.创建关键表

CREATE TABLE `user_zj` (
  `zj_id` int(10) NOT NULL AUTO_INCREMENT,
  `user_join_id` int(10) NOT NULL COMMENT '用户报名id',
  `zj_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `activity_id` int(10) NOT NULL,
  `version` int(10) DEFAULT NULL COMMENT '版本信息',
  PRIMARY KEY (`zj_id`)
) ENGINE=MyISAM AUTO_INCREMENT=74 DEFAULT CHARSET=utf8 COMMENT='用户中奖表';

CREATE TABLE `user_join` (
  `user_join_id` int(10) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `activity_id` int(11) NOT NULL COMMENT '商品活动id',
  `join_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `client` varchar(11) NOT NULL,
  `mobile` varchar(11) NOT NULL,
  PRIMARY KEY (`user_join_id`)
) ENGINE=MyISAM AUTO_INCREMENT=334 DEFAULT CHARSET=utf8 COMMENT='用户报名表';

CREATE TABLE `user_activity` (
  `activity_id` int(10) NOT NULL AUTO_INCREMENT,
  `goods_sn` varchar(20) NOT NULL,
  `goods_id` int(10) NOT NULL,
  `stage_index` smallint(2) NOT NULL,
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `create_time` int(4) NOT NULL COMMENT '上架时间',
  `origin_price` float(6,2) NOT NULL,
  `activity_price` float(6,2) NOT NULL COMMENT '活动秒杀价格',
  `goods_name` varchar(200) NOT NULL,
  `goods_desc` text COMMENT '商品描述',
  `goods_pic` varchar(200) NOT NULL,
  `limit_number` smallint(5) NOT NULL COMMENT '限抢名额',
  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1上架,0下架',
  PRIMARY KEY (`activity_id`),
  UNIQUE KEY `stage_index` (`stage_index`),
  KEY `goods_sn` (`goods_sn`)
) ENGINE=MyISAM AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 COMMENT='商品活动表';

2.关键SQL语句

user_activity表中获取抢购名额,在user_zj表中获取中奖记录数量。如果达到抢购名额,则抢购失败,按抢购时间
顺序,先到先得的方案。
$sql="select max(version) from user_zj ";
$version = $this->db->query($sql);

$data['version'] = $version+1;

$sql="INSERT INTO user_zj (user_join_id,activity_id,version) SELECT {$data['user_join_id']},{$data['activity_id']},{$data['version']} 
      FROM DUAL  WHERE NOT EXISTS (SELECT * FROM user_zj WHERE version = {$data['version']})";
$this->db->query($sql);
$insert_id=$this->db->insert_id();
if($insert_id)
{

    $this->ajaxReturn('0X0000','true','恭喜你获得秒杀价资格!');
}else{
 
    $this->ajaxReturn('0X0009','false',"没有秒杀到!");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值