gpt4 book ai didi

php - MySQL 使用两个查询创建事件调度程序

转载 作者:行者123 更新时间:2023-11-28 23:19:31 24 4
gpt4 key购买 nike

我需要一些 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

最佳答案

查询:

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 上运行聚合查询。 .现在因为有两个 group_ideventtab 中(在同一个表中),将需要两个单独的聚合查询。这两个是什么LEFT JOIN在那里。

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


假设:

此处假设如果与事件关联的任一组中的用户数少于 10,则事件将被取消。如果应该考虑组合计数,则查询只需要按如下方式进行小的调整:

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


Demo

希望对您有所帮助。

关于php - MySQL 使用两个查询创建事件调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42448679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com