我正在尝试编写一个MySQL查询,如果用户在过去24小时内没有访问该帖子,它将更新博客文章视图计数器。我正在尝试编写这样的东西(但这不起作用):
IF EXISTS (
SELECT 1
FROM `posts-views`
WHERE
`ip` = '".$_SERVER['REMOTE_ADDR']."'
AND
`time` > ".($time-60*60*24)."
AND
`post` = $id
) THEN
NULL
ELSE
INSERT INTO `posts-views`
(`post`, `time`, `ip`, `user`)
VALUES
($id, $time, '".$_SERVER['REMOTE_ADDR']."', $me)
修复查询的正确方法是什么?
据我所知,在这种情况下您不能使用INSERT IGNORE
,但如下所示的内容应该可以完成这项工作:
INSERT INTO `posts-views`
(`post`, `time`, `ip`, `user`)
SELECT $id, $time, '".$_SERVER['REMOTE_ADDR']."', $me
FROM dual
WHERE NOT EXISTS (
SELECT 1
FROM `posts-views`
WHERE
`ip` = '".$_SERVER['REMOTE_ADDR']."'
AND
`time` > ".$time-60*60*24."
AND
`post` = $id
)
我完全省略了转义变量,这绝对应该在实际代码中完成。
已更新 - 添加了from dual
以避免语法错误