gpt4 book ai didi

mysql - 基于事件/时间和条件的 SQL

转载 作者:行者123 更新时间:2023-11-29 14:40:34 25 4
gpt4 key购买 nike

我想这更像是一个设计模式问题,而不是 SQL 问题。

在我的应用程序中,用户可以加入,可以创建商店并在其商店中加载产品(因此可以说有一个用户、商店(一对一)和产品(与商店多对一)。

所以我希望能够根据时间和标准做某些事情(但仅限一次),例如,如果加入用户后一周没有商店,我想发送一封电子邮件,或者加入后两周商店但没有产品发送电子邮件等 - 但我只想做一次。

这是唯一一次让我头脑清醒的运行 - 例如,假设我有这个查询

select * from user where joineddt < '1 week ago date'

我有一个脚本,每 3 小时运行一次,触发 SQL,然后执行任何事件(例如发送电子邮件),然后我想确保如果再次触发该脚本,它不会获取任何已经执行过的用户已处理。我想引入一个“事件”表,一旦用户的事件被触发,就记录该事件的条目,但这似乎又不起作用。例如,假设我有事件表,有 id、用户、事件

select * from user a
left join event b on b.user = a.id
where a.joineddt < '1 week ago date'
and b.event = 'userjoined'
and b.id is null

因此,当事件中没有能够用于“userjoined”事件的条目时,它将不会返回任何结果...但实际上我希望它返回事件表中没有此“userjoined”事件的用户事件?

那么有人能想出一种方法来实现我的建议吗?

最佳答案

您的查询将始终返回 0 行,因为如果 b.id 为 null,则 b.event 永远无法“用户加入”。将“userjoined”条件移至连接子句。

SELECT a.* 
FROM user a
LEFT JOIN event b ON (b.user = a.id AND b.event = 'userjoined')
WHERE a.joineddt < '1 week ago date'
AND b.id IS NULL

关于mysql - 基于事件/时间和条件的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076950/

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