首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果ip地址存在于另一表MYSQL中,则在另一表中增加计数器列

如果ip地址存在于另一表MYSQL中,则在另一表中增加计数器列
EN

Stack Overflow用户
提问于 2020-09-21 21:58:00
回答 1查看 76关注 0票数 0

我在table_1中有一个viewCounter专栏。每次使用新的ip地址访问该页面时,我会将viewCounter列递增1。这是为了记录有多少人访问了该页面。在表table_2中,我在table_1中保存了用户的ip地址和行的id。下面是列的外观,以及当我进行更新查询时的一个可能的场景,我目前正在尝试对其进行优化。

tabel_1

代码语言:javascript
复制
------------------
| id | viewCount |
------------------
| 1  |   35      |
------------------

table_2

代码语言:javascript
复制
----------------------
| tb1_id | ipAddress |
----------------------
|   1    | 0.1.0.1   |
----------------------

可能的场景: ip地址为0.1.0.0的用户访问该页面。我查询table_2以查看是否存在包含tb1_id和当前用户的ip地址的行。如果不存在,我将不存在的用户的ip地址保存到table_2,并在table_1中递增viewCount。

我的问题是,我如何才能只进行一次查询(即一次数据库访问)并执行此操作?

这是我想出来的代码,尽管运行良好,但它需要一次以上的旅行

代码语言:javascript
复制
        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]
            );
        }

任何有助于提高代码效率和减少访问数据库的帮助都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 09:04:01

除非我遗漏了一个要求,否则我认为你工作太努力了。请考虑以下内容:

代码语言:javascript
复制
CREATE TABLE vc (
    ip VARCHAR(15) CHARSET ascii,
    ctr INT UNSIGNED,
    PRIMARY KEY(IP)
) ENGINE=InnoDB;

代码语言:javascript
复制
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只会变得杂乱无章,拖慢速度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63993828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档