如果时间戳在最近5分钟内,则更新mysql行

c9qzyr3d  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(342)

我试图创建一个不和谐的统计机器人,但我有一些问题,试图让它的一部分工作。
我要做的是记录每通道每5分钟发送的消息数。在我的bot中,我有以下代码:

// 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)
      });

但是,bot总是插入新行,从不更新现有行。
我运行了sql查询 SELECT * FROM channel_stats WHERE channel_id = 'x' AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND timestamp(NOW()) 手动通过phpmyadmin,这似乎工作正常-只返回在过去5分钟内创建的行。
我很难理解为什么机器人会不断地添加新行。任何帮助都将不胜感激。
谢谢!

dauxcl2d

dauxcl2d1#

我自己设法解决了这个问题,将channel\u id行设置为int(11),这导致channel\u id被截断。
把它改成了varchar(30),现在工作得很好。

相关问题