MySql создает или обновляет строку с помощью ip?

У меня есть таблица с ips и количество раз, когда ip обращался к определенной странице. Я хочу добавить его к счету, если строка существует с ip, иначе создайте строку с 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 .

Я в порядке с двумя заявлениями. Как я могу это сделать?

Измените 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 является предпочтительным.

Вам нужно начать с выбора. (Ответ на псевдокодиш – вам нужно будет настроить свой диалект.)

Так что сделайте

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