mysql - 如何在EXPRESSJS/MYSQL中获取父子关系?

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

我有这样的表:

  • 没有
  • 字母

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

alphabets 表包含 (apple,ball,cat,dog)

这是我的 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

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

最佳答案

您可以使用 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');
});

关于mysql - 如何在EXPRESSJS/MYSQL中获取父子关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41478451/

相关文章:

javascript - Passport.js——如何异步使用渲染电子邮件

node.js - 如何在 Meteor 中执行服务器端文件处理操作?

node.js - headless Chrome 屏幕截图的最大高度为 16,384 像素?

node.js - 无法使用 ExpressJS 与 oauth2orize 提供程序保持持久登录

javascript - express.js "next()"参数的确切性质

node.js - Express 不返回所有查询字符串参数

php - 如果零后为空,为什么要选择选项值

mysql - 如何在不使用子查询的情况下修复此 mysql 查询?

mysql - 根据另一个表中的列更新表中的列。

mysql - SQL:使用 LIKE,如果搜索匹配该行中的任何值,则返回该行