c语言编程笔录

首页 >   > 笔记大全

笔记大全

MySQL表设计实战创建一个优惠券表和使用记录表

更新时间:2023-12-25
## 创建优惠券表 我们开始创建一个优惠券表,这个表用于存储所有优惠券的信息。设计表时需要考虑优惠券的基本信息,例如编号、名称、有效期和面额等。以下是表的从头部中定义的代码示例:
CREATE TABLE `coupons` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL COMMENT '优惠券名字',
  `code` varchar(50) NOT NULL COMMENT '优惠码',
  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '优惠券类型:1满减优惠;2折扣优惠',
  `min_amount` decimal(10,2) DEFAULT NULL COMMENT '最低使用条件, 满多少元可用',
  `discount` decimal(5,2) DEFAULT NULL COMMENT '折扣, 0.00 ~ 1.00',
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠额度,数值或百分比',
  `total` int(11) NOT NULL DEFAULT '0' COMMENT '发放总量',
  `stock` int(11) NOT NULL DEFAULT '0' COMMENT '剩余库存',
  `limit_type` tinyint(4) DEFAULT '0' COMMENT '使用限制类型:0不限制,1用户限制,2订单限制,3限时限量,4限时限购',
  `limit_amount` int(11) DEFAULT NULL COMMENT '使用限制数量,0为不限',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '截止时间',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
  `deleted_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='优惠券表';
解释: - `id` 是优惠券的唯一标识符。每个优惠券都必须有一个唯一的编号。 - `name` 是优惠券的名称,用于识别优惠券的类型。 - `code` 是优惠券的唯一编码,用户在使用优惠券时需要使用这个编码。 - `type` 是优惠券的类型。1 表示满减优惠,2 表示折扣优惠。 - `min_amount` 是最低使用条件,满足这个条件才可以使用优惠券。 - `discount` 是折扣比例,在折扣优惠中使用。 - `amount` 是优惠额度,在满减优惠中使用。 - `total` 是发放总量,在优惠券创建时就需要指定。 - `stock` 是优惠券的剩余库存,每个优惠券都有一定的库存数量。 - `limit_type` 是使用限制类型,表示优惠券的使用类型。 - `limit_amount` 是使用限制的数量,0 表示不限制。 - `start_time` 和 `end_time` 是优惠券的有效期,只在有效期内才可以使用。 ## 创建优惠券使用记录表 现在我们需要创建一个表来记录优惠券的使用情况。这个表和优惠券表存在关联,通过优惠券的编号来关联两个表。以下是表的从头部中定义的代码示例:
CREATE TABLE `coupon_history` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `coupon_id` int(11) NOT NULL COMMENT '优惠券ID',
  `order_id` int(11) NOT NULL COMMENT '订单ID',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `used_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='优惠券使用记录';
解释: - `id` 是使用记录的唯一标识符。 - `coupon_id` 是优惠券的唯一标识符,与优惠券表中的 `id` 字段相对应。 - `order_id` 是订单的唯一标识符,与订单表中的 `id` 字段相对应。 - `user_id` 是用户的唯一标识符。 - `used_at` 是使用时间,使用优惠券时会记录下来。 - `created_at` 是创建时间,使用记录创建时就会记录下来。 ## PHP代码示例 下面是PHP代码示例,我们使用面向对象的方式操作 MySQL:

插入一条优惠券数据

// 创建一个优惠券对象
class Coupon {
    public $name;
    public $code;
    public $type;
    public $minAmount;
    public $discount;
    public $amount;
    public $total;
    public $stock;
    public $limitType;
    public $limitAmount;
    public $startTime;
    public $endTime;

    public function __construct(
        $name, $code, $type, $minAmount, $discount, $amount,
        $total, $stock, $limitType, $limitAmount, $startTime, $endTime
    ) {
        $this->name = $name;
        $this->code = $code;
        $this->type = $type;
        $this->minAmount = $minAmount;
        $this->discount = $discount;
        $this->amount = $amount;
        $this->total = $total;
        $this->stock = $stock;
        $this->limitType = $limitType;
        $this->limitAmount = $limitAmount;
        $this->startTime = $startTime;
        $this->endTime = $endTime;
    }

    public function save() {
        $mysqli = new mysqli("localhost", "user", "password", "database");
        $sql = "INSERT INTO `coupon` (
            `name`, `code`, `type`, `min_amount`, `discount`,
            `amount`, `total`, `stock`, `limit_type`, `limit_amount`,
            `start_time`, `end_time`
        ) VALUES (
            '{$this->name}', '{$this->code}', {$this->type}, {$this->minAmount},
            {$this->discount}, {$this->amount}, {$this->total}, {$this->stock},
            {$this->limitType}, {$this->limitAmount}, '{$this->startTime}', '{$this->endTime}'
        )";
        $result = $mysqli->query($sql);
        if (!$result) {
            trigger_error($mysqli->error);
        }
    }
}

// 插入一条数据
$coupon = new Coupon(
    "打折券", "123456", 2, 0, 0.75, 0, 100, 100, 1, 1,
    "2021-05-01 00:00:00", "2022-05-01 00:00:00"
);
$coupon->save();

插入一条使用记录数据

$mysqli = new mysqli("localhost", "user", "password", "database");
$orderId = 1001;
$couponId = 1;
$userId = 1000;
$sql = "INSERT INTO `coupon_history` (
    `coupon_id`, `order_id`, `user_id`
) VALUES (
    {$couponId}, {$orderId}, {$userId}
)";
$result = $mysqli->query($sql);
if (!$result) {
    trigger_error($mysqli->error);
}

查找指定优惠券的使用记录

$mysqli = new mysqli("localhost", "user", "password", "database");
$couponId = 1;
$sql = "SELECT `coupon_id`, `order_id`, `user_id`, `used_at`
    FROM `coupon_history`
    WHERE `coupon_id` = {$couponId}";
$result = $mysqli->query($sql);
if ($result) {
    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }
} else {
    trigger_error($mysqli->error);
}
## 总结 创建优惠券表和使用记录表是电商开发中的常见需求。在设计表结构时需要考虑优惠券的基本信息,例如优惠券的名称、类型、有效期、面额等。使用记录表中需要保存优惠券的编号、订单号、使用时间等信息,并且需要和优惠券表关联。在 PHP 代码中,我们可以使用面向对象的方式来操作 MySQL 数据库,将实体对象和数据库操作进行解耦。