我在table_1中有一个viewCounter专栏。每次使用新的ip地址访问该页面时,我会将viewCounter列递增1。这是为了记录有多少人访问了该页面。在表table_2中,我在table_1中保存了用户的ip地址和行的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。
我的问题是,我如何才能只进行一次查询(即一次数据库访问)并执行此操作?
这是我想出来的代码,尽管运行良好,但它需要一次以上的旅行
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]
);
}任何有助于提高代码效率和减少访问数据库的帮助都将不胜感激
发布于 2020-09-22 09:04:01
除非我遗漏了一个要求,否则我认为你工作太努力了。请考虑以下内容:
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 existingAUTO_INCREMENT只会变得杂乱无章,拖慢速度。
https://stackoverflow.com/questions/63993828
复制相似问题