我正在尝试为不和谐的人创建一个统计机器人,但在尝试使它起作用的过程中遇到了一些问题。

我正在尝试做的是记录每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分钟内创建的行。

我正在努力理解为什么该机器人不断添加新行。任何帮助,将不胜感激。

谢谢!

最佳答案

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

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

关于mysql - 如果时间戳在最近5分钟内,则更新mysql行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50337514/

10-11 03:51