如果时间戳在最后 5 分钟内,则更新 mysql 行
update mysql row if timestamp is within last 5 mins
我正在尝试为 discord 创建一个统计机器人,但我在尝试让它的一部分工作时遇到了一些问题。
我想做的是每隔 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)
});
但是,机器人 总是 插入一个新行并且从不更新现有行。
我 运行 sql 通过 phpmyadmin 手动查询 SELECT * FROM channel_stats WHERE channel_id = 'xxxxxxxxxxxxx' AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND timestamp(NOW())
,这似乎工作正常 - 在过去 5 分钟内仅创建了 returns 行。
我很难理解为什么机器人会不断添加新行。任何帮助将不胜感激。
谢谢!
自己设法解决了这个问题,将 channel_id 行设置为 int(11),这导致 channel_id 被截断。
将其更改为 VARCHAR(30),现在运行良好。
我正在尝试为 discord 创建一个统计机器人,但我在尝试让它的一部分工作时遇到了一些问题。
我想做的是每隔 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)
});
但是,机器人 总是 插入一个新行并且从不更新现有行。
我 运行 sql 通过 phpmyadmin 手动查询 SELECT * FROM channel_stats WHERE channel_id = 'xxxxxxxxxxxxx' AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND timestamp(NOW())
,这似乎工作正常 - 在过去 5 分钟内仅创建了 returns 行。
我很难理解为什么机器人会不断添加新行。任何帮助将不胜感激。
谢谢!
自己设法解决了这个问题,将 channel_id 行设置为 int(11),这导致 channel_id 被截断。
将其更改为 VARCHAR(30),现在运行良好。