吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 304|回复: 4
收起左侧

[经验求助] 关于数据库判断会员时间过期改状态的功能

[复制链接]
WangsBoy 发表于 2024-7-15 14:37
25吾爱币
1.想弄一个存储过程,自动的
判断到期时间 如果vip_expiry_date大于now()并且 vip_status !=1 , 就更改vip_status =1
如果vip_expiry_date小于now()并且 vip_status =1 , 就更改vip_status =2
下边是自己找到内容但是没成功
mysql版本8.0.24
[Asm] 纯文本查看 复制代码
DELIMITER // 
 
 #创建过滤器
CREATE PROCEDURE UpdateUserInformationVipStatus()
BEGIN 
    -- 更新vip_type为1的条件
    UPDATE user_information
    SET vip_status = 1 
    WHERE vip_expiry_date > NOW() AND vip_status != 1;
 
    -- 更新vip_type为2的条件
    UPDATE user_information
    SET vip_status = 2 
    WHERE vip_expiry_date < NOW() AND vip_status  = 1;
END// 

#创建存储过程
CREATE EVENT CheckAndUpdateUserInformationVipType 
ON SCHEDULE EVERY 10 SECOND
STARTS CURRENT_TIMESTAMP 
DO CALL UpdateUserInformationVipType();

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Zh123999 发表于 2024-7-15 14:44
gpt回复。你看看有没有用

你想要创建一个 MySQL 存储过程,根据 vip_expiry_date 和 vip_status 的值来自动更新 vip_status。这听起来像是一个很好的任务!让我帮你设计一个存储过程来实现这个功能。

首先,我们需要创建一个存储过程,然后在其中编写逻辑来判断 vip_expiry_date 和 vip_status 的条件。以下是一个示例存储过程,你可以根据你的需求进行修改:


DELIMITER //

CREATE PROCEDURE UpdateVipStatus()
BEGIN
    DECLARE current_time DATETIME;
    DECLARE expiry_date DATETIME;
    DECLARE current_status INT;

    -- 获取当前时间
    SET current_time = NOW();

    -- 获取到期时间和当前状态
    SELECT vip_expiry_date, vip_status INTO expiry_date, current_status
    FROM your_vip_table
    WHERE vip_id = your_vip_id; -- 替换为你的 VIP 表和 ID

    -- 判断条件并更新状态
    IF expiry_date > current_time AND current_status != 1 THEN
        UPDATE your_vip_table
        SET vip_status = 1
        WHERE vip_id = your_vip_id;
    ELSEIF expiry_date < current_time AND current_status = 1 THEN
        UPDATE your_vip_table
        SET vip_status = 2
        WHERE vip_id = your_vip_id;
    END IF;
END //

DELIMITER ;


请注意以下几点:

替换 your_vip_table 和 your_vip_id 为你实际使用的表名和 VIP ID。
这个存储过程假设你的 VIP 表中有 vip_expiry_date 和 vip_status 字段。
存储过程中的逻辑会根据条件更新 vip_status。

如果你遇到问题或需要进一步的帮助,请随时告知!
 楼主| WangsBoy 发表于 2024-7-15 14:49
Zh123999 发表于 2024-7-15 14:44
gpt回复。你看看有没有用

你想要创建一个 MySQL 存储过程,根据 vip_expiry_date 和 vip_status 的值来 ...

这个每太看懂。。INTO expiry_date, current_status 是再干嘛
Zh123999 发表于 2024-7-15 14:54
你的存储过程的代码基本上是正确的,但是有一些小问题需要修复。让我帮你检查一下:

首先,你在创建存储过程时使用了 DELIMITER //,这是正确的。但是在结束存储过程定义时,你需要使用 DELIMITER ; 来恢复默认的分隔符。所以你的代码应该是这样的:

DELIMITER //

CREATE PROCEDURE UpdateUserInformationVipStatus()
BEGIN
    -- 更新vip_type为1的条件
    UPDATE user_information
    SET vip_status = 1
    WHERE vip_expiry_date > NOW() AND vip_status != 1;
  
    -- 更新vip_type为2的条件
    UPDATE user_information
    SET vip_status = 2
    WHERE vip_expiry_date < NOW() AND vip_status = 1;
END //

DELIMITER ;

其次,你创建存储过程时使用了 CREATE EVENT,但是你的目标是创建一个存储过程而不是事件。所以你应该使用 CREATE PROCEDURE 来创建存储过程,而不是事件。
Zh123999 发表于 2024-7-15 14:56
DELIMITER //

CREATE PROCEDURE UpdateUserInformationVipStatus()
BEGIN
    DECLARE current_time DATETIME;
    DECLARE expiry_date DATETIME;
    DECLARE current_status INT;

    -- 获取当前时间
    SET current_time = NOW();

    -- 获取到期时间和当前状态
    SELECT vip_expiry_date, vip_status INTO expiry_date, current_status
    FROM user_information
    WHERE vip_id = your_vip_id; -- 替换为你的 VIP 表和 ID

    -- 判断条件并更新状态
    IF expiry_date > current_time AND current_status != 1 THEN
        UPDATE user_information
        SET vip_status = 1
        WHERE vip_id = your_vip_id;
    ELSEIF expiry_date < current_time AND current_status = 1 THEN
        UPDATE user_information
        SET vip_status = 2
        WHERE vip_id = your_vip_id;
    END IF;
END //

DELIMITER ;



请注意以下几点:

替换 your_vip_id 为你实际使用的 VIP ID。
这个存储过程假设你的 user_information 表中有 vip_expiry_date 和 vip_status 字段。
存储过程中的逻辑会根据条件更新 vip_status。

免费评分

参与人数 1吾爱币 +1 收起 理由
WangsBoy + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 00:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表