微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果另一个表中存在IP地址,则递增一个表中的计数器列

如何解决如果另一个表中存在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?