| 1234567891011121314151617181920212223242526 |
- -- 会员开通/续费后台能力:sa_rental_user 加会员到期快照字段 + 回填历史记录。
- -- 此 SQL 的 ALTER 不能重复执行;建议使用 scripts/migrate_rental_user_member_fields.php。
- -- 1) ALTER 加字段(idempotent)。MySQL 8.0+ 支持 IF NOT EXISTS;
- -- 旧版 MySQL 用 INFORMATION_SCHEMA 判定是否已存在。
- ALTER TABLE `sa_rental_user`
- ADD COLUMN `member_expire_at` DATETIME NULL COMMENT '会员到期时间' AFTER `card_gift_balance`,
- ADD COLUMN `member_card_type` TINYINT NOT NULL DEFAULT 0 COMMENT '当前会员卡类型 0月卡 1季卡 2半年卡 3年卡' AFTER `member_expire_at`,
- ADD KEY `idx_rental_user_member_expire` (`member_expire_at`);
- -- 2) 回填:取每个用户最近一次开通/续费成功的卡类型与到期时间。
- -- 仅回填 status=1 且尚未过期的记录,避免把已过期失效的卡作为快照。
- UPDATE `sa_rental_user` u
- INNER JOIN (
- SELECT r.user_id,
- SUBSTRING_INDEX(GROUP_CONCAT(r.card_type ORDER BY r.expire_time DESC), ',', 1) + 0 AS latest_card_type,
- MAX(r.expire_time) AS latest_expire_time
- FROM `sa_member_activation_record` r
- WHERE r.`delete_time` IS NULL
- AND r.`status` = 1
- AND r.`expire_time` >= NOW()
- GROUP BY r.user_id
- ) latest ON latest.user_id = u.id
- AND u.`member_expire_at` IS NULL
- SET u.`member_card_type` = latest.latest_card_type,
- u.`member_expire_at` = latest.latest_expire_time;
|