请问如何解决node-mysql多层回调的问题
例如:
table_user: userId, userName
table_user_course: userId, courseName
现在我想通过node获得这样的结果:
[
{
"userID": 1,
"userName": "mark",
"userCourse": [
{
"courseName": "math"
},
...
]
},
...
]
我是准备这样解决的:
// require("mysql");
// mysql connection
var resData = null;
mysql.query({
sql: 'SELECT * FROM table_user'
}, function(err, rows) {
// if rows && rows.length>0
var usersInfo = [];
for (var row in rows) {
var userInfo = {
userId: row.userId,
userName: row.userName,
userCourse: []
};
mysql.query({
sql: 'SELECT * FROM table_course WHERE userID = '+row.userId
}, function(err, rows) {
/* 这里怎么把获取的信息返回给上面的userInfo.userCourse */
});
usersInfo.push(userInfo);
}
/* 这里怎么把最后的usersInfo赋值给resData */
resData = usersInfo;
});
/* 上面的有很多是伪代码,怕文字表述不清才这样写的,所以大家不要在意个别小错误=。= */
所以请问:
- 用
async
是可以解决单次依赖,那循环多次那块应该怎么办?可以继续用async
解决问题吗? - 有其他办法或途径可以解决吗?比如能否用
sql
语句直接解决问题==#
谢谢大家…
4 回复
select a.userId, a.userName, b.courseName from table_user a join table_user_course b on a.userId=b.userId;
楼主好好补补 SQL。。。。
async 有很多方法啊…应该有可以解决的…
恩,谢谢,确实没怎么仔细研究过join
,这样确实可以在第一次执行sql的时候获取到所有想要的信息。那如果某个场景下需要执行两次sql,并且第二次依赖于第一次的结果应该怎样处理呢?
@imziyang 这个就要用到 sql 过程的东西了。不过建议你还是分两次 sql 查询做吧。