1

我正在尝试编写一个 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)

修复查询的正确方法是什么?

4

1 回答 1

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以避免语法错误

于 2013-11-08T21:33:09.197 回答