У меня есть таблица с 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>...);