1

テーブルが呼び出されlimits、次のフィールドを受け取ります。

id    |    ip    |    limit

ページが読み込まれるたびに、ユーザーがこのテーブルにレコードを持っているかどうかを確認し (によって決定されますip)、そうでない場合はレコードを挿入します。ただし、レコードが既に存在する場合は、何もしたくありません。

基本的にINSERT IF NOT EXISTS型クエリが必要です。私はすでにこれを読んでおり、INSERT IGNORE例は良さそうに見えますが、私が知る限り、主キーに対してのみ機能します。私の場合、フィールドは主キーであり、すでに存在するidかどうかを確認したいと考えています。ip

以下は、ある種の疑似 SQL コードです。

INSERT INTO `limits` (ip, limit)
VALUES ('127.0.0.1', 8)
IF NOT EXISTS `limits`.`ip`

助けてくれてありがとう!

編集:これも試しました

INSERT IGNORE INTO `limits`
SET `ip` = ‘127.0.0.1′,
`limit` = 8;
4

2 に答える 2

2

INSERT IGNORE主キーであるか一意のキーであるかに関係なく、一意のインデックスは無視されます。

を使用して、IP で一意のキーを作成できます。

ALTER TABLE limits
  ADD CONSTRAINT idx_limits_ip
  UNIQUE (ip)

マニュアルには、インデックスを作成するための代替構文がいくつかあります。

于 2013-01-30T21:06:10.923 に答える
0
INSERT INTO `limits` (ip, limit)
SELECT '127.0.0.1', 8
WHERE NOT EXISTS (SELECT * FROM `limits` WHERE `limits`.`ip` =  '127.0.0.1')
于 2013-01-30T20:26:19.733 に答える