MySql crée ou met à jour une ligne avec ip?

J'ai une table avec ips et un nombre de fois que l'IP a accédé à une certaine page. Je veux append un au count si une ligne existe avec l'ip, sinon créer une ligne avec l'ip et définir le count à 1.

j'ai essayé

INSERT INTO mytable (ip,count) VALUES ('" + ip + "',1) ON DUPLICATE KEY UPDATE count=count+1; 

Mais ip n'est pas unique ou primaire, il continue de créer des lignes avec le même ip. J'ai essayé de rendre ip unique, mais ça ne me laissera pas. Lorsque j'essaie de créer une colonne de text et de la rendre unique, phpmyadmin dit BLOB/TEXT column 'test' used in key specification without a key length .

Je suis bien avec l'utilisation de deux déclarations. Comment puis-je accomplir cela?

Changez ip pour UNSIGNED INT , créez une contrainte UNIQUE sur celui-ci et utilisez ceci:

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

Pour récupérer l'ip en notation décimale (comme 192.168.1.1 ), utilisez:

 SELECT INET_NTOA(ip) FROM mytable 

Vous pouvez également créer un index préfixé:

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

mais l'utilisation de la colonne INT pour stocker une adresse ipv4 est préférée.

Vous devez commencer avec un choix. (Une réponse pseudo-codée – vous devrez ajuster pour votre dialecte spécifique.)

Donc faites un

 select count(*) from mytable where ip = $ip; 

Si le nombre de return est supérieur à 0,

 update mytable set count = count + 1 where ip = $ip 

autre

 insert into mytable($ip, count, <other fields>...) values (ip, 1, <other values>...);