1

IP と、IP が特定のページにアクセスした回数の表があります。行がIPで存在する場合はカウントに1を追加し、そうでない場合はIPで行を作成し、カウントを1に設定します。

私は試した

INSERT INTO mytable (ip,count) VALUES ('" + ip + "',1) ON DUPLICATE KEY UPDATE count=count+1;

ただし、ip は一意でもプライマリでもないため、同じ ip を持つ行を作成し続けます。ip を一意にしようとしましたが、できません。テキスト列を作成して一意にしようとすると、phpmyadmin がBLOB/TEXT column 'test' used in key specification without a key length.

2つのステートメントを使用しても問題ありません。どうすればこれを達成できますか?

4

2 に答える 2

6

に変更ipUNSIGNED INTUNIQUE制約を作成して、これを使用します。

INSERT
INTO    mytable (ip, count)
VALUES  (INET_ATON($ip), 1)
ON DUPLICATE KEY
UPDATE
        count = count + 1

ドット 10 進数表記 ( など192.168.1.1) で IP を取得するには、次を使用します。

SELECT  INET_NTOA(ip)
FROM    mytable

接頭辞付きのインデックスを作成することもできます:

CREATE UNIQUE INDEX ux_mytaable_ip ON mytable (ip(15))

ただし、INT列を使用して ipv4 アドレスを格納することをお勧めします。

于 2012-04-20T20:54:56.683 に答える
0

選択から始める必要があります。(疑似コーディッシュの答え - 特定の方言に合わせて調整する必要があります。)

だから、

select count(*) from mytable
where ip = $ip;

返されたカウントが 0 より大きい場合は、

update mytable
set count = count + 1
where ip = $ip

そうしないと

insert into mytable($ip, count, <other fields>...) values (ip, 1, <other values>...);
于 2012-04-20T20:59:54.840 に答える