如何解决如果另一个表中存在IP地址,则递增一个表中的计数器列
我在viewCounter
中有一个table_1
列。每次使用新IP地址的用户访问该页面时,我都会在viewCounter
列中增加1。这是为了记录访问该页面的人数。在表table_2
中,我保留了用户的IP地址以及table_1
中该行的ID。这是我现在尝试优化的更新查询时,列的外观以及可能的情况。
tabel_1
:
------------------
| id | viewCount |
------------------
| 1 | 35 |
------------------
table_2
:
----------------------
| tb1_id | ipAddress |
----------------------
| 1 | 0.1.0.1 |
----------------------
可能的情况:
ip地址为0.1.0.0
的用户访问该页面。我查询table_2以查看是否存在具有tb1_id和当前用户ip地址的行。如果没有,我将不存在的用户的IP地址保存到table_2
,并在table_1
中增加viewCount。
我的问题是如何仅执行1个查询(即一次数据库访问)并执行此操作?
这是我想出的代码,尽管可以正常工作,但它需要超过1次行程
const [rows] = await db.query(
`
SELECT
ipAddress
FROM
PageViews
WHERE
ipAddress = ?
`,['ipAddress']
);
if (rows.length === 0) {
await db.query(
`
INSERT INTO
PageViews
SET
projectId = ?
AND
ipAddress = ?
`,[projectId,ipAddress]
);
await db.query(
`
UPDATE
Project
SET
viewCount = viewCount + 1
WHERE
id = ?
`,[projectId]
);
}
解决方法
除非我没有满足要求,否则我认为您工作太努力了。考虑一下:
CREATE TABLE vc (
ip VARCHAR(15) CHARSET ascii,ctr INT UNSIGNED,PRIMARY KEY(IP)
) ENGINE=InnoDB;
和
INSERT INTO vc (ip,ctr)
VALUES (?,1) -- Does INSERT when new IP
ON DUPLICATE KEY UPDATE ctr = VALUES(ctr) + 1; -- or Increments when existing
AUTO_INCREMENT
只会很混乱,会使速度变慢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。