【问题标题】:MySQL store values for a limited time in a tableMySQL 在表中存储有限时间的值
【发布时间】:2012-11-25 21:41:14
【问题描述】:

我创建了一个剧院门票预订网站(用户-> 预订和支付/管理员-> 从网络界面管理销售)。 我使用 mysql 数据库中的一个表来处理票:每一列是特定的一天,这一天的每一行都是一个布尔值,用于知道哪个座位被预订(1 表示已预订,0 表示免费)。 但是我想改进这个系统,并在用户当前在线预订并且尚未付款(最终确定订单)时设置第三种状态,以防止其他用户预订他的座位。 那么,有没有办法将这第三个状态(例如 -1)保存在门票表中的有限时间(大约 15 分钟)?

提前谢谢你

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    onInsert/onUpdate 触发器与SLEEP(<seconds>) 一起使用。

    更新:

    mysql> delimiter //
    mysql> CREATE TRIGGER ins_trig BEFORE INSERT ON tickets
        -> FOR EACH ROW
        -> BEGIN
        -> DO SLEEP(60000);
        -> UPDATE tickets SET status=1 WHERE id = NEW.id;
        -> END;
        -> //
    

    请注意,触发器只能从 root 设置。

    【讨论】:

    • 感谢您的更新,我可能做错了,因为它仍然无法正常工作...mysql> delimiter // mysql> CREATE TRIGGER ins_trig BEFORE INSERT ON tickets_table -> FOR EACH ROW -> BEGIN -> DO SLEEP(600); -> UPDATE tickets_table SET column = '1' WHERE column = '0' LIMIT 5; -> END; -> //
    • 我认为它在我的情况下不起作用,因为每个变量表(每年一个票表)的列也是可变的(col = 唯一代表日和行 = 每个座位的状态(id表))
    • 我认为解决方案可能是在达到延迟时发出一种异步 php 请求来更新票证表...您对此有何看法?
    • 它与 SOF 上的curl_post_async 函数配合得很好,但现在,我不知道如何取消请求(例如,如果客户付款成功)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2011-09-25
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多