1

ユーザーが過去 24 時間以内に投稿にアクセスしていない場合にブログ投稿ビュー カウンターを更新する MySQL クエリを作成しようとしています。私はこのようなものを書こうとしています(しかし、これはうまくいきません):

  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 に答える