刚接触nodejs不久,最近使用express框架做一个api平台。使用了Mysql数据库。然而,在MYSQL查询的时候,遇到了一个问题解决不了。
要实现的功能: 查询项目列表信息(project表),并且同时返回用户的昵称,头像(user表)。
问题描述: 要返回的总数组为datas。在第一次SQL查询中,成功获得了project表的所有信息,然后,遍历每一条记录,并且获取每一条记录所属的用户ID,第二次SQL查询则是根据用户ID来获取nickname和avatar。然后合并。最后返回。
但是现在出现问题:返回的结果,只是第一次查询的内容数组。第二次的没有合并成功。 虽然通过联合查询可以实现该功能,但是在其他地方还是遇到了这个问题,并且没法使用联合查询。所以迫切的需要解决该问题。
============================================= project表: id user_id title content
user表: id nickname avatar
我最先开始是使用了2个select语句来实现。但是无法把user表的信息组合到总信息数组中。代码如下: exports.recommendList = function(req, res){ res.setHeader('Content-Type', 'application/json;charset=utf-8'); res.setHeader('Access-Control-Allow-Origin', ''); var user_id =''; var page = parseInt(req.params.page); var pagesize = 3; var offset = pagesize(page-1); var sql = "select * from project where status!=0 and recommend =1 order by id desc limit "+offset+","+pagesize;
conn.query(sql,function(err,rows){
if (err) {
console.log(err);
}else{
var i = 0;
var datas = new Array();
rows.forEach(function(row){
var user_id = row.user_id;
var user_sql = "select avatar,nickname from user where id="+user_id;
conn.query(user_sql,function(err,result){
if (err) {
console.log(err);
}else{
var nickname = result[0].nickname;
var avatar = result[0].avatar;
console.log("nickname="+nickname);
console.log("avatar="+avatar);
row.nickname = nickname;
row.avatar = avatar;
console.log(row); //这里合并成功
}
})
datas[i]=row; //这里不显示合并后的结果。只显示第一次查询后的结果
i++;
})
console.log(datas);
res.json({code: 200,content:datas})
}
});
};