2017-01-05 15 views
1

私はこのようなテーブルがあります。EXPRESSJS/MYSQLで親子関係を取得する方法は?

  • なし
  • アルファベットは

表が表が含まれている(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(); 

2つのクエリの親子関係は、テーブルを親として、子をアルファベットとして持つ必要があります。コマンドプロンプトで

私の予想される出力:

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 

最初のクエリが非同期に実行され、ループ、それを完成理由。 2つのクエリの間に関係を作成すると、アルファベット表で繰り返されるテーブルがない最後の値を避けてクエリを同期して実行できますか?

答えて

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