在Node.js和Mysql中按月过滤数据

时间:2019-02-20 13:48:09

标签: mysql node.js express ejs

在MYSQL数据库和NodeJS后端中按月过滤数据的最佳方法是什么?

我在解析为ejs的结果变量中具有所有数据。

let sql = "SELECT * FROM test_results";
    exports.home = function (req, res, error) {
    pool.getConnection(function (err, connection) {
        if (err) throw err; // not connected!
        connection.query(sql, function (err, results, fields) {
            if (err) throw error;
            res.render('home/index', {
                moment: moment,
                results: results
            });
        });
        connection.release();
        if (err) throw error;
    })
};

每次使用DB写入数据时,我都有时间戳,所以现在我需要获取数字。在一月,二月创建了多少行...

我尝试过这样的事情:

connection.query("SELECT * FROM test_results WHERE test_date_time BETWEEN '2018-01-01 05:00:00' and '2018-01-31 05:00:00'", function(err, results, fields) {

我每个月都会这样做,然后将数据解析为ejs。但我认为这不是好方法。另外,我需要在客户端获得所有结果,以便我可以与它们一起工作,所以我不知道是否有一种方法可以用JS不在SQL查询中过滤数据。

我尝试将时间戳转换为矩,然后使用if语句进行过滤,但我不知道该怎么做。

有什么想法吗?谢谢

1 个答案:

答案 0 :(得分:0)

这是我所看到的简单方法。

可能不理想,但应该适合您的目的。

您只需要运行一个查询。这样应该可以得到预期的结果。

您可以使用MYSQL内置的GROUP BYCOUNTmonth来完成此任务。

这里是示例:

SELECT COUNT(id) as amount, month(test_date_time) as month FROM test_results GROUP BY month(test_date_time)

这是输出示例:

enter image description here

从响应中您可以看到它给了我结果:

  • 在第8个月中,我获得了1231条记录(金额)
  • 仅在11个月2。

希望这会有所帮助。