1

我有一个包含 2 列的 MySQL 表,第一列是 IP 地址,第二列是应该递增的整数。

当一个新的 IP 访问该网站时,对应于该 IP 的整数应该增加 1。PHP 脚本还应该处理 IP 地址已经存在于数据库中的情况。

这是为了更新整数:

UPDATE user SET points = points + 1 WHERE code = '$u'

这是为了向数据库添加一个新的 ip(我使用属性“唯一”,不能保存双精度值):

INSERT IGNORE INTO $DB_Table (ip,code) values(INET_ATON('$ip'),'$code')

现在我希望整数仅在新 IP 访问该网站时增加 1。如果我可以减少两个查询并在 1 个查询中完成工作,那就太好了。感谢您的任何帮助。

4

3 回答 3

1

是的,你可以使用这样的东西

INSERT INTO table (ip, code, points) values ('ip value', 'code value', 1) ON DUPLICATE KEY UPDATE points = points + 1 WHERE ip = 'ip value';

请注意,您需要 ip 上的主键或唯一索引才能使其正常工作。我不确定“代码”值代表什么,因此如果它也是唯一键,那么更新子句实际上可能会出现问题。

请注意,我在插入子句中为点添加了初始值 1。

于 2012-08-03T17:09:04.250 回答
1

INSERT INTO $DB_Table (ip,code) values(INET_ATON('$ip'),'$code') ON DUPLICATE KEY UPDATE user SET points = points + 1 WHERE code = '$u'

在 MYSQL 表中有pointsDEFAULT = 1

于 2012-08-03T17:09:52.490 回答
1

您可以使用以下INSERT ... ON DUPLICATE KEY方法将两者合并在一起:

INSERT INTO visitors (ip, code, counter) VALUES (INET_ATON($ip), '$code', 1) ON DUPLICATE KEY UPDATE counter = counter + 1;
于 2012-08-03T17:10:13.207 回答