我有一张包含 ip 的表,以及该 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。
BLOB/TEXT column 'test' used in key specification without a key length
我可以使用两个语句。我该如何实现这一点?
更改ip为UNSIGNED INT,在其上创建UNIQUE约束并使用它:
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),请使用:
192.168.1.1
SELECT INET_NTOA(ip) FROM mytable
您还可以创建前缀索引:
CREATE UNIQUE INDEX ux_mytaable_ip ON mytable (ip(15))
但INT最好使用列来存储 IPv4 地址。
INT