首页 > 解决方案 > 在 Node.js 和 Mysql 中按月过滤数据

问题描述

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

我有每次在数据库中写入数据时的时间戳,所以现在我需要获取数字 1 月、2 月创建了多少行......

我试过这样的事情:

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 语句过滤,但我不知道如何做到这一点。

有任何想法吗?谢谢

标签: mysqlnode.jsexpressejs

解决方案


这是我看到的简单方法。

也许不理想,但应该适合你的目的。

您只需要运行一个查询。这应该会产生预期的结果。

您可以使用MYSQL 中内置的GROUP BYCOUNTmonth来执行此任务。

这是示例:

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

这是输出示例:

在此处输入图像描述

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

  • 在第 8 个月,我有 1231 条记录(金额)
  • 在第 11 个月只有 2 个。

希望这可以帮助。


推荐阅读