【问题标题】:update mysql row if timestamp is within last 5 mins如果时间戳在最后 5 分钟内,则更新 mysql 行
【发布时间】:2018-10-24 12:55:29
【问题描述】:

我正在尝试为不和谐创建一个统计机器人,但我在尝试让它的一部分工作时遇到了一些问题。

我想要做的是每隔 5 分钟记录每个频道发送的消息数量。在我的机器人中,我有以下代码:

    // on message events
    bot.on("message", async message => {
    if(message.author.bot) return;
    if(message.channel.type === "dm") return;

    //update channel stats
    connection.query(`SELECT * FROM channel_stats WHERE channel_id = '${message.channel.id}' AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND timestamp(NOW())`, (err, rows) => {
        if(err) throw err;

        let sql;

        if(rows.length < 1) {
            sql = `INSERT INTO channel_stats (channel_id, date, channel_name, channel_message_count) VALUES ('${message.channel.id}', NOW(), '${message.channel.name}', 1)`;
        } else {
            let channel_message_count = rows[0].channel_message_count;
            sql = `UPDATE channel_stats SET channel_message_count = ${channel_message_count + 1}, channel_name = '${message.channel.name}' WHERE channel_id = '${message.channel.id}'`;
        };

        connection.query(sql)
      });

但是,机器人总是插入一个新行并且从不更新现有行。

我通过 phpmyadmin 手动运行了 sql 查询 SELECT * FROM channel_stats WHERE channel_id = 'xxxxxxxxxxxxx' AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND timestamp(NOW()),这似乎工作正常 - 仅返回最近 5 分钟内创建的行。

我很难理解为什么机器人会不断添加新行。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 一个可能的原因是,您将机器人安排在 5 分钟的间隔。在 SQL 中,您正在查询自最近 5 分钟以来的数据。换一种方式思考,如果创建与数据库的连接、在数据库上执行 SQL 或将数据集返回给您将花费超过 1 秒的时间。在这种情况下, rows.length 将始终小于 1。我假设,正确调试它。你能得到答案吗?
  • 警告:为避免SQL injection bugs 始终使用placeholder values 转义查询中的任何任意数据。
  • @KKK 好吧,机器人不是每 5 分钟实时运行一次,我只希望它更新在过去 5 分钟内创建的行。如果在最后 5 分钟内没有创建任何行,请创建一个新的 tadman,感谢您的提醒!

标签: mysql node.js discord discord.js


【解决方案1】:

自己设法解决了这个问题,将 channel_id 行设为 int(11),导致 channel_id 被截断。

将其更改为 VARCHAR(30),现在可以正常工作了。

【讨论】:

  • 我建议将频道 ID 存储为 VARCHAR 类型而不是 BIGINT,因为频道 ID 是字符串而不是整数。试试console.log(123456789101112131, '123456789101112131') 看看为什么。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多