所以基本上我有一个带有表服务和子目录的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>';
我不太确定仅通过大大减少对数据库的调用来提高效率,也不知道我应该做些什么,但是我希望学习的是如何使原始解决方案正常工作,因为初学者,我很难绕过异步编程,有人可以分享一些见识吗?
我不只是想在下一年忘记它,直到它再次出现而且我找不到很多文档