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

如果时间戳在最近5分钟内,则更新mysql行,mysql,node.js,discord,discord.js,Mysql,Node.js,Discord,Discord.js,我正在尝试为discord创建一个统计机器人,但是我在尝试让它的一部分工作时遇到了一些问题 我想做的是每隔5分钟记录每个通道发送的消息数。在我的bot中,我有以下代码: // on message events bot.on("message", async message => { if(message.author.bot) return; if(message.channel.type === "dm") return; //update c

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

我想做的是每隔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)
      });
//关于消息事件
on(“消息”,异步消息=>{
if(message.author.bot)返回;
if(message.channel.type==“dm”)返回;
//更新频道统计信息
connection.query(`SELECT*FROM channel_stats,其中channel_id='${message.channel.id}和时间戳(date_SUB(NOW(),INTERVAL 5 MINUTE))和时间戳(NOW())`,(err,rows)=>{
如果(错误)抛出错误;
让sql;
如果(行数长度<1){
sql=`INSERT INTO channel_stats(channel_id、日期、channel_名称、channel_消息_计数)值('${message.channel.id}',NOW(),'${message.channel.name}',1)`;
}否则{
让通道消息计数=行[0]。通道消息计数;
sql=`UPDATE channel_stats SET channel_message_count=${channel_message_count+1},channel_name='${message.channel.name}',其中channel_id='${message.channel.id}`;
};
连接查询(sql)
});
但是,bot始终插入新行,而从不更新现有行

我通过phpmyadmin手动运行sql查询
SELECT*FROM channel_stats,其中channel_id='xxxxxxxxxxxx'和timestamp(date_SUB(NOW(),INTERVAL 5 MINUTE))和timestamp(NOW())
,这似乎工作正常-仅返回在最近5分钟内创建的行

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


谢谢!

我自己设法解决了这个问题,通道id行为int(11),这导致通道id被截断


将其更改为VARCHAR(30)现在它工作得很好。

一个可能的原因是,您将bot的时间间隔安排为5分钟。在SQL中,您是从最近5分钟开始查询数据的。请以不同的方式思考,如果创建到数据库的连接,或在数据库上执行SQL或将数据集返回给您将需要超过1秒的时间。在这种情况下,rows.length将是be始终小于1。我假设,请正确调试它。您可能会得到您的答案。警告:为了避免总是通过使用来转义查询中的任意数据。@KKK好的,bot不是每5分钟实时运行一次,我只希望它更新在过去5分钟内创建的行。如果在过去5分钟内没有创建任何行,请创建一个新的行。谢谢请注意!我建议将通道ID存储为VARCHAR类型而不是BIGINT,因为通道ID是字符串而不是整数。请尝试
console.log(12345678910112131,'12345678910112131')
了解原因。