如果 IP 地址存在于另一个 table MYSQL 中,则在一个 table 中增加计数器列
increment counter column in one table if ip address exists in another table MYSQL
我在 table_1
中有一个 viewCount
列。每次有新 ip 地址的用户访问该页面时,我都会将 viewCount
列增加 1。这是为了记录有多少人访问了该页面。在 table table_2
中,我将用户的 IP 地址以及行的 ID 保留在 table_1
中。以下是我进行更新查询时列的外观和可能的场景案例,我目前正在尝试对其进行优化。
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 = ctr + 1; -- or Increments when existing
AUTO_INCREMENT
只会变得混乱并拖慢速度。
我在 table_1
中有一个 viewCount
列。每次有新 ip 地址的用户访问该页面时,我都会将 viewCount
列增加 1。这是为了记录有多少人访问了该页面。在 table table_2
中,我将用户的 IP 地址以及行的 ID 保留在 table_1
中。以下是我进行更新查询时列的外观和可能的场景案例,我目前正在尝试对其进行优化。
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
.
我的问题是如何只进行 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 = ctr + 1; -- or Increments when existing
AUTO_INCREMENT
只会变得混乱并拖慢速度。