MySQL - “插入如果不存在”查询?

时间:2013-11-08 21:29:18

标签: mysql

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

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

1 个答案:

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