如何在EXPRESSJS / MYSQL中获得父子关系?

时间:2017-01-05 06:19:48

标签: mysql node.js express parent-child hierarchical-data

我有这样的表:

  • 没有
  • 字母

没有表包含(1,2,3,4)

字母表包含(苹果,球,猫,狗)

这是我的js文件:

var connection = require('../connection');

function Todo() {
    this.get = function(res) {
        connection.acquire(function(err, con) {
            con.query('select * from no', function(err, result) {
                for(var key in result) {
                    var no = result[key].number;
                    console.log(no); 
                    con.query('select * from alphabets', function(err, result2) {
                        for(var key in result2) {
                            var alph = result2[key].alphabets;
                            console.log(no+"."+alph);
                        }
                        console.log('\n');
                        });
                    }
                    con.release();
                    res.send(result);
                });
            });
        };
    }
module.exports = new Todo();

我需要在两个查询之间建立父子关系,没有表作为父级,字母表作为子级。

我在命令提示符下的预期输出:

    1.apple
    1.ball
    1.cat
    1.dog

    2.apple
    2.ball
    2.cat
    2.dog

    3.apple
    3.ball
    3.cat
    3.dog

    4.apple
    4.ball
    4.cat
    4.dog

我得到的输出:

    1
    2
    3
    4
    4.apple
    4.ball
    4.cat
    4.dog


    4.apple
    4.ball
    4.cat
    4.dog


    4.apple
    4.ball
    4.cat
    4.dog


    4.apple
    4.ball
    4.cat
    4.dog

我想知道为什么第一个查询以异步方式运行并完成循环。如何在两个查询之间创建关系,以便查询同步运行,避免在字母表表中重复无表的最后一个值?

1 个答案:

答案 0 :(得分:1)

您可以使用SynJS同步运行带回调的函数。我稍微重构了一下你的代码,这是一个有效的版本:

global.SynJS = global.SynJS || require('synjs');
var mysql      = require('mysql');

var connection = mysql.createConnection({
    database : 'tracker',
    user     : 'tracker',
    password : 'tracker123'
});


var myFunction1=function( mysql, connection ) {

    connection.connect(function(err) {
        SynJS.resume(_synjsContext);
    });
    SynJS.wait();


    var result;
    connection.query('select * from no', function(err, res) {
        result = res;
        SynJS.resume(_synjsContext);
    });
    SynJS.wait();

    for(var key in result)
    {
        var no = result[key].number;
        console.log(no);
        var result2=null;
        connection.query('select * from alphabets', function(err, res2) {
            result2 = res2;
            SynJS.resume(_synjsContext);
        });
        SynJS.wait();

        for(var key in result2)
        {
            var alph = result2[key].alphabets;
            console.log(no+"."+alph);
        }
        console.log('\n');

    }
};

SynJS.run(myFunction1,null, mysql, connection, function (ret) {
    console.log('done');
});