请问如何解决node-mysql多层回调的问题
发布于 11 年前 作者 imziyang 4692 次浏览 最后一次编辑是 8 年前

例如:

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;
});

/* 上面的有很多是伪代码,怕文字表述不清才这样写的,所以大家不要在意个别小错误=。= */

所以请问:

  1. async是可以解决单次依赖,那循环多次那块应该怎么办?可以继续用async解决问题吗?
  2. 有其他办法或途径可以解决吗?比如能否用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 查询做吧。

回到顶部