MySql 使用 ip 创建或更新行


MySql create or update row with ip?

>我有一个包含ips的表格,并计算了ip访问某个页面的次数。如果 ip 存在一行,我想在计数中添加一个,否则创建一个带有 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 .

我可以使用两个语句。我怎样才能做到这一点?

ip更改为 UNSIGNED INT ,对其创建一个UNIQUE约束并使用它:

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

要以点十进制表示法(如 192.168.1.1)检索 ip,请使用:

SELECT  INET_NTOA(ip)
FROM    mytable

您还可以创建一个前缀索引:

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

但最好使用INT列来存储 IPv4 地址。

你需要从选择开始。(一个伪codish 答案 - 您需要针对您的特定方言进行调整。

所以做一个

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>...);