我有一个表名master_surveys,master_questions和master_answers。从那些表我想为json查询创建一个嵌套数组结果,我遇到了一些问题因为结果无法给出任何响应
我已经搜索了什么问题,但似乎问题是在这个代码然后我试图改变代码但错误变得那么多,所以我决定保留第一个代码
这是我的代码
this.getSurvey = function(req,res,next) {
var id = req.query.id;
connection.acquire(function(err,con){
var survey = 'SELECT ms.id ,ms.title, ms.created_at, count(mq.id) question FROM master_surveys ms, master_questions mq WHERE ms.id=mq.survey_id';
con.query(survey, function(err,data){
if (data.length > 0) {
var survey = data[0];
var question = 'SELECT mq.id, mq.title, mq.type, mq.survey_id FROM master_surveys ms, master_questions mq WHERE ms.id=mq.survey_id and ms.id="'+survey.id+'"';
con.query(question, function(err, data){
if (data.length > 0) {
var answer = 'SELECT ma.id, ma.title, ma.selected_answer, ma.question_id FROM master_questions mq, master_answers ma WHERE mq.id=ma.question_id and mq.id="'+id+'"';
con.query(answer, function(err, data){
if(data.length>0){
question.data = data;
}
if (data.question== null) {
survey.data = [];
}
survey.data.push(question);
}), function (err) {
if (survey.questions.length == questions.length) {
res.json(survey);
}
}
;
};
});
};
});
});
};
答案 0 :(得分:0)
当您的查询未返回任何结果或甚至发出错误时,您都不会回答http请求。我建议首先从一个简单的查询开始:
con.query('SELECT * FROM your_table', function(err, data) {
if(err)
// TODO reply the HTTP request with an appropriate error code
else {
if(data.length > 0) {
// TODO parse the result and form you json object
res.json(/* your json object */);
}
else {
res.json({}); // for example
}
}
});
只有在你得到它之后才能改进它,直到你得到你想要的结果。
你不应该像这样串行执行几个sql查询,或者至少尽可能少。 JOIN clause肯定是要走的路。
最后,您还应该知道您的代码是针对SQL注入打开的,请参阅this post。