gpt4 book ai didi

mysql - 仅当 SELECT 不返回任何行时才插入

转载 作者:行者123 更新时间:2023-11-29 01:38:59 25 4
gpt4 key购买 nike

我通过将用户记录在数据库中来跟踪用户对网站的访问。一次访问有 6 小时的冷却时间。出于这个原因,我想在表 visits 中添加一行,仅当用户上次访问当前网站超过 6 小时前。如果上次访问时间少于 6 小时,则什么也不做。

我四处寻找这个问题的答案,发现了很多非常相似的问题,但没有一个对我有用。

这是我尝试的最后一个查询:

INSERT INTO visits (user_id, web_id)
SELECT (66, 2) FROM websites WHERE NOT EXISTS (
SELECT 1 FROM visits WHERE web_id = 2 and user_id = 66 and added_on >= NOW() - INTERVAL 6 HOUR
)

我在 WHERE NOT EXISTS 附近遇到语法错误。

最佳答案

您可能希望使用触发器而不是在应用程序中强制执行此规则。但我认为问题在于 SELECT 子句中的括号:

INSERT INTO visits (user_id, web_id)
SELECT 66, 2
FROM websites
WHERE NOT EXISTS (SELECT 1
FROM visits
WHERE web_id = 2 and user_id = 66 and
added_on >= NOW() - INTERVAL 6 HOUR
);

嗯。 . .你的查询很奇怪。什么是网站?您的查询将为该表中的每一行插入一行。您似乎不太可能想要这种行为。也许你只是想要这个:

INSERT INTO visits (user_id, web_id)
SELECT w.user_id, w.web_id
FROM (SELECT 66 as user_id, 2 as web_id) w
WHERE NOT EXISTS (SELECT 1
FROM visits v
WHERE v.web_id = w.web_id and
v.user_id = w.user_id and
v.added_on >= NOW() - INTERVAL 6 HOUR
);

关于mysql - 仅当 SELECT 不返回任何行时才插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206859/

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