【问题标题】:MySQL create event scheduler with two queriesMySQL 使用两个查询创建事件调度程序
【发布时间】:2017-02-24 21:33:26
【问题描述】:

我需要一点对 MySQL 查询的支持。 所以这就是我的应用程序的工作方式,之后我将解释我想在后端做什么。

在应用程序中,用户可以创建事件(就像 facebook 一样),并自动使用这些事件创建两个组。之后,用户可以加入这些活动,并在活动中加入这两个组。现在这些活动都有过期日期,如果用户没有按时填满这些组,活动将被自动取消。

所以我需要在 mysql 中安排事件并检查事件中的组是否已填充最少数量的用户,并且此事件应每分钟触发一次。

这就是我的表格的外观:

event
- id
- group_one_id (Foreign key)
- group_two_id (Foreign key)

groups
- id

user_groups
- id
- user_id
- group_id

所以这是我的查询应该具备的一些条件:

两组用户数应大于 10

    CREATE EVENT myevent
ON SCHEDULE EVERY 50 SECOND
DO
UPDATE events
SET status = 2 // event is canceled
WHERE .. // here i need help

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    查询:

    UPDATE eventtab e
        LEFT JOIN
        (
            SELECT group_id, count(user_id) AS group_one_users_count 
            FROM user_groups 
                GROUP BY group_id
        ) temp1
        ON e.group_one_id = temp1.group_id
        LEFT JOIN
        (
            SELECT group_id, count(user_id) AS group_two_users_count 
            FROM user_groups 
                GROUP BY group_id
        ) temp2
        ON e.group_two_id = temp2.group_id
    SET event_status = 2
    WHERE 
        IFNULL(group_one_users_count, 0) < 10
     OR IFNULL(group_two_users_count, 0) < 10;
    


    说明:

    为了能够计算组中的参与者数量,需要在 user_groups 上运行聚合查询。现在由于eventtab 中有两个 group_ids(在同一个表中),因此需要两个单独的聚合查询。这就是两个LEFT JOINs 的用途。

    user_groups 表中的某个group_id 也可能没有任何用户(即没有匹配的记录)。这意味着LEFT JOINgroup_id(即group_one_idgroup_two_id)FROM eventtab 将在JOIN 生效时返回NULL 值。因此,查询应将这些NULL 值视为0,而不是在eventtab 中发现候选group_ids,其中event_status 应设置为2


    假设:

    这里的一个假设是,如果与事件相关联的任一组中的用户数少于 10,则该事件将被取消。如果应该考虑组合计数,则查询只需要进行如下微调:

    WHERE 
        ( IFNULL(group_one_users_count, 0) 
          + 
          IFNULL(group_two_users_count, 0) 
        ) < 10
    


    Demo

    希望对您有所帮助。

    【讨论】:

    • 对我帮助很大。真的很详细的解释。谢谢哥们!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多