MySql用ip创建或更新行?

时间:2012-04-20 20:50:59

标签: php python mysql sql

我有一张包含ips的表,以及ip访问某个页面的次数。如果ip存在一行,我想在count中添加一个,否则用ip创建一行并将count设置为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 个答案:

答案 0 :(得分:6)

ip更改为UNSIGNED INT,在其上创建UNIQUE约束并使用此权限:

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

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

SELECT  INET_NTOA(ip)
FROM    mytable

您也可以创建一个带前缀的索引:

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

但首选使用INT列存储ipv4地址。

答案 1 :(得分: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>...);