2016-01-26 52 views
2

我是MySQL和node.js(以及回調函數)的新手。我嘗試將數據插入到表B中,這取決於表A中的數據。下面是一個示例。在node.js中插入MySQL中的兩個依賴表

員工表(表一):

CREATE TABLE employees (
    id int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(50), 
    location varchar(50), 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

年齡表(表B,我不包括故意表A年齡列):

CREATE TABLE age (
    id int(11) NOT NULL AUTO_INCREMENT, 
    index_id int(11), 
    age int(50), 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

問題

對於插入表A的每一行,我都可以得到它的ID。我想在表B中使用id作爲index_id,並將相應的年齡信息插入到年齡表B中。當我插入多行時,會出現問題。

的例子

我實現以下功能來實現上述目標。

var mysql = require("mysql"); 
var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "root", 
    database: "sitepoint" 
}); 

function insert_employees() { 
    var employees = [ 
     {name: 'Jasmine', location: 'Australia', age: 24}, 
     {name: 'Jay', location: 'India', age: 25}, 
     {name: 'Jim', location: 'Germany', age: 26}, 
     {name: 'Lesley', location: 'Scotland', age: 27} 
    ]; 
    var name_id; 
    for (var i = 0; i < 4; i++) { 
     var employee = employees[i]; 
     var command = sprintf('INSERT INTO employees (name, location) VALUES ("%s", "%s");', employee.name, employee.location); 
     con.query(command, function (err, res) { 
      if (err) throw err; 
      name_id = res.insertId; 
      console.log('Last insert ID in employees:', res.insertID); 

      // insert age here 
      var age = employee.age; 
      var command = sprintf('INSERT INTO age (index_id, age) VALUES (%d, %d);', name_id, age); 
      con.query(command, function (err, res) { 
       if (err) throw err; 
      }); 
     }); 
    } 
} 

輸出

enter image description here

enter image description here

僱員表是好的,但對於年齡表,年齡列的所有領域,而不是24,25,26,27

問題

我認爲這個問題是在我的回調功能的濫用,但我還是不知道如何解決它。任何人都可以幫助我嗎?非常感謝!

+0

在'var age = employee.age''後面加'';'''儘管JS支持 – mmuzahid

+0

謝謝,它被添加了。 –

+0

你能否提供你的DDL表 – mmuzahid

回答

2
var employee = employees[i]; 

更改上述線以下,使變量員工有正確的範圍:

let employee = employees[i]; 

以下內容添加到你的腳本的開頭,讓我們的作品:

'use strict'; 
+0

非常感謝!它完美地運作。 –

+0

歡迎您!享受! –