gpt4 book ai didi

mysql - 如果找到两个条目,则返回零条目

转载 作者:行者123 更新时间:2023-11-29 09:51:12 25 4
gpt4 key购买 nike

我正在开发一个小项目,用户可以在其中激活和停用警报。它包含多个实体,但要重点关注的是“警报”和“警报事件”。我的意图是,如果 AlarmActivity 同时包含“已触发”和“已取消”事件,那么它们应该相互抵消。

查询如下所示:

SELECT DISTINCT alarmid, 
unixtimestamp,
latitude,
longitude,
severity,
u.userid AS requestuserid,
u.names AS requestname,
aa.alarmevent AS alarmevent
FROM alarms AS a
LEFT JOIN users AS u ON userid = useridfk
RIGHT JOIN usersgroups AS ug ON a.groupidfk = ug.groupidfk
RIGHT JOIN alarmactivity AS aa ON a.alarmid = aa.alarmidfk
WHERE unixtimestamp > (UNIX_TIMESTAMP()-1800)
ORDER BY requestuserid

...并返回如下内容: enter image description here

结果基于这些实体:

警报

enter image description here

警报事件

enter image description here

在这种情况下,它应该返回零行。可以一次设置多个警报,因此如果它包含两个“已触发”行和一个“已取消”警报,则它应该仅返回尚未取消的警报。我尝试了不同的 IF 解决方案,但由于它涉及一次检查几行,所以我有点卡住了。

我也尝试了 PHP 解决方案,但由于某种原因,50% 的时间它只返回零行 - 所以我尝试寻求更优雅的解决方案,并希望它能够同时解决这个问题时间。

您能帮我朝正确的方向插入吗?

编辑:只是忘记提及已取消的警报永远无法重新激活 - 因此另一个警报将在“警报”中生成新行。另外,我不只是从实体中删除警报的原因是我想跟踪激活的警报。

最佳答案

而不是RIGHT JOIN AlarmActivity 你可以

select alarmactivity.*
from
(
select alarmidfk
from alarmactivity
group by alarmidfk
having count(alarmevent)=1
) as oneEvents
inner join
alarmactivity on alarmactivity.alarmidfk=oneEvents.alarmidfk

关于mysql - 如果找到两个条目,则返回零条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54782878/

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