节点MySQL将子节点填充为数组

时间:2017-10-30 04:17:14

标签: mysql node.js mysql2

我是MySQL的新手,来自Mongo背景,所以我习惯使用Mongoose的.populate()方法来检索文档的关联作为子数组。有没有办法在MySQL中做到这一点?现在我正试图在一个查询中检索一个包含所有问题的测验。我有一个quizzes表和一个questions表,其中有一个parent_quiz_id字段,用于引用测验ID。我已经尝试了SELECT * FROM quizzes JOIN questions ON questions.parent_quiz_id = quizzes.quiz_id WHERE quizzes.quiz_id = ?的几种排列,但它们为我提供了每个问题的所有测验信息,这似乎效率低下。

有一种方法可以让单个查询一次检索测验信息,并在后续行中填充属于该测验的所有问题吗?

这就是我现在正在做的事情,有两个单独的查询:

connection.beginTransaction(function(err){                 if(err){throw err; }

            //First get the quiz data
            connection.execute('SELECT * FROM quizzes WHERE quiz_id = ? LIMIT 1', [id], function (err, quiz_results) {
                if (err) {
                    return connection.rollback(function() {
                        throw err;
                    });
                }

                const quiz = quiz_results[0];
                if(!quiz){
                    return done({ message: "No quiz found with that id"}, false);
                }

                //Now get all of the quiz's questions
                connection.execute('SELECT * FROM questions WHERE parent_quiz_id = ?', [id], function (err, question_results) {
                    if (err) {
                        return connection.rollback(function() {
                            throw err;
                        });
                    }

                    connection.commit(function(err) {
                        if (err) {
                            return connection.rollback(function() {
                                throw err;
                            });
                        }

                        quiz['questions'] = question_results;

                        return done(null, quiz);
                    });
                });
            });
        });

但我宁愿不使用两个单独的查询。对于参考,我使用的是Node MySQL2

0 个答案:

没有答案
相关问题