秒杀技术实现细节 PHP

来源:互联网 发布:mac总是显示flash过期 编辑:程序博客网 时间:2024/04/30 22:45

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
原创粉丝点击