首页 > 解决方案 > 在同一个表上运行两个查询并在同一个路由上实现它们

问题描述

我怎样才能使这项工作?

我认为我应该使用承诺,但我对它们知之甚少。我已经阅读过它们,但无法创建应有的结构。

我只是想在同一个表上运行两个不同的查询,并在同一个 ejs 文件上使用返回值

app.get('/', (req, res) => {

    db.query('SELECT COUNT(*) AS count, FORMAT(SUM(donation_amount),2) AS total FROM donations;', (err, result) => {
        if (err) throw err;
        let count = result[0].count; //since query column is requested as "count". we can use "count" to get back the raw value
        let total = result[0].total;
        res.render('home', { count: count, total: total }); // just the file name is enough. ejs engine looks up the file name in the "views" folder
    });

    db.query('SELECT CONCAT(first_name, ", ", last_name AS latest_donator, donation_amount AS amount FROM donations ORDER BY donation_time LIMIT 1;', (err, result) => {
        if (err) throw err;
        let donatorName = result[0].latest_donator;
        let amount = result[0].amount;
        res.render('home', {first_name: donatorName, amount: amount});
    });
 });

标签: javascriptmysqlnode.jsexpressejs

解决方案


res.render(...)只有获得两个查询的结果后,您才能发送响应 ( )。因此,您可能希望像这样按顺序执行它们。

app.get('/', (req, res) => {
    db.query('SELECT COUNT(*) AS count, FORMAT(SUM(donation_amount),2) AS total FROM donations;', (err, result) => {
        if (err) throw err;
        let count = result[0].count; //since query column is requested as "count". we can use "count" to get back the raw value
        let total = result[0].total;
        db.query('SELECT CONCAT(first_name, ", ", last_name AS latest_donator, donation_amount AS amount FROM donations ORDER BY donation_time LIMIT 1;', (err, result) => {
            if (err) throw err;
            let donatorName = result[0].latest_donator;
            let amount = result[0].amount;
            res.render('home', { first_name: donatorName, amount: amount, count: count, total: total });
        });
    });
});

但是查询彼此独立,因此您可以并行运行它们。


推荐阅读