我正在尝试编写一个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)
修复查询的正确方法是什么?
答案 0 :(得分:2)
从我看到你不能在这种情况下使用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
以避免语法错误