在Node JS中嵌套SQL查询的异步调用?

时间:2019-12-15 21:28:13

标签: mysql node.js ejs

所以基本上我有一个带有表服务和子目录的MySQL数据库, subcats中具有服务表的主键,我想用ejs模板将每个服务及其描述与每个子类别一起写(我最好将其移至.ejs文件本身),因此在进行大量挖掘之后,我这样做了: / p>

    let i = 0;
    db.query("SELECT * FROM services;", function(err, result) {
        if (err) throw err;
        async.forEachOf(result, function (row, i, inner_callback){
            op+=`<input type="radio" name="service" id="`+i+`" value="`+row.service+`"><label for="`+i+`">`+row.desc_se+`</label><select id="`+i+`sc">`;
            db.query("SELECT subcat, desc_sc, price FROM subcats WHERE service='"+row.service+"';", function(err, result){
                if (err) inner_callback(err);
                result.forEach(function(row) {
                    op+=`<option value="`+row.subcat+`">`+row.desc_sc+` `+row.price+`RSD</option>`;
                    inner_callback(null);
                });
                op+=`</select><br/>\n`;
                i++;
            }, function(err){
                if (err) throw err;
                res.render('sr/services', {title: "Usluge", options: op});
            });
        });
    })

没有用,最终使我想到了这一点:

    db.query("SELECT * FROM subcats LEFT JOIN services ON subcats.service=services.service", function(err,rows){
        if (err) throw err;
        let i = 1;
        let op = `<input type="radio" name="service" id="0" value="`+rows[0].service+`" checked><label for="0">`+rows[0].desc_se+`</label> <select id="0sc"><option value="`+rows[0].subcat+`">`+rows[0].desc_sc+` `+rows[0].price+`RSD</option>`;
        let pr = rows[0].service;
        for(let j=1;j<rows.length;j++){
            if (rows[j].service != pr){
                op+=`</select><br/>\n<input type="radio" name="service" id="`+i+`" value="`+rows[j].service+`"><label for="`+i+`">`+rows[j].desc_se+`</label> <select id="`+i+`sc"><option value="`+rows[j].subcat+`">`+rows[j].desc_sc+` `+rows[j].price+`RSD</option>`;
                i++;
                pr = rows[j].service;
            }
            else
                op+=`<option value="`+rows[j].subcat+`">`+rows[j].desc_sc+` `+rows[j].price+`RSD</option>`;
        }
        op+='</select>';

我不太确定仅通过大大减少对数据库的调用来提高效率,也不知道我应该做些什么,但是我希望学习的是如何使原始解决方案正常工作,因为初学者,我很难绕过异步编程,有人可以分享一些见识吗?

我不只是想在下一年忘记它,直到它再次出现而且我找不到很多文档

0 个答案:

没有答案