簡體   English   中英

使用Node.js編寫MySQL一對多關系

[英]Using Node.js to write MySQL One-to-Many relationship

我嘗試了幾種方法,也許node.js是用於此目的的錯誤語言,但我認為可以很快完成。 我正在獲取一個包含名稱和地址的聯系人表,並將其轉換為具有一對多關系的兩個表,以便一個聯系人可以具有多個地址。 所需的數據結構如下:

聯系人表contactId firstName lastName電話電子郵件等...

地址表addressId contactId街道城市州等...

當前,所有字段都在同一表中。

我得到的結果是第二個查詢中的數據永不變。 因此,如果我先編寫聯系人查詢,則它可以按預期工作,但是所有地址最終都將成為一個聯系人地址的重復。 如果我先插入地址記錄,那么我會得到一個聯系人的重復記錄。 我先嘗試嵌套查詢,但是當出現這種情況時我將其拆分。 我的想法是我可以寫查詢。 我需要寫聯系人並找回ID,然后用contactID寫地址。 或者,我需要寫地址並獲取該THAT ID,然后寫聯系人,獲取該ID,然后執行更新查詢以將contactId放入地址記錄中。 最后一種方法是下面的代碼中所示的嘗試。

這是我目前的代碼:

var sql = "SELECT * FROM pfPeople";
connection.query(sql, function(err, result, fields)  {
    if (err) throw err;

    for (var i = 0; i < result.length; i++) {
        var names = result[i].fullName.replace(/"/g, "'").split(" ");

        var sql2 = "INSERT INTO contact (firstName, lastName, title, phone1, phone2, fax, email1, notes, org) VALUES (" + 
        "\"" + names[0] + "\", \"" + names[1] + "\", \"" + result[i].title.replace(/"/g, "'") + " \", \"" + result[i].phone1 + "\", \"" + 
        result[i].phone2 + "\", " + "\"" + result[i].phone3 + "\", \"" + result[i].email + "\", \"" + result[i].notes.replace(/"/g, "'") + "\", \"" + 
        result[i].org.replace(/"/g, "'") + "\")";

        var street = result[i].street;
        var city = result[i].city;
        var state = result[i].state;
        var zip = result[i].zip;
        var country = result[i].country;

        var sql3 = "INSERT INTO address (address1, city, state, zip, country) VALUES (" + 
        "\"" + street + "\", \" " + city + "\", \"" + state + "\", \"" + zip + "\", \"" + country + "\")";

        var contactId;
        var addressId;

        connection.query(sql2, function(err, cResult) {
            if (err) throw err;

            var contactId = cResult.insertId;

            console.log("Inserted ID: " + contactId);
        });

        connection.query(sql3, function(err, aResult) {
            if (err) throw err;

            var addressId = aResult.insertId;
        });

        var sql4 = "UPDATE address set contactId = " + contactId + " WHERE (addressId = " + addressId + ")";

        connection.query(sql4, function(err, uRes) {
            console.log("Address updated " + addressId + " " + contactId);
        });

        if (i > 3) break;
    }
});

好吧,我補充一些承諾,以使其更容易。 問題是您沒有等待響應完成。 試試這個代碼

 var sql = "SELECT * FROM pfPeople"; connection.query(sql, function(err, result, fields) { if (err) throw err; for (var i = 0; i < result.length; i++) { var names = result[i].fullName.replace(/"/g, "'").split(" "); var sql2 = "INSERT INTO contact (firstName, lastName, title, phone1, phone2, fax, email1, notes, org) VALUES (" + "\\"" + names[0] + "\\", \\"" + names[1] + "\\", \\"" + result[i].title.replace(/"/g, "'") + " \\", \\"" + result[i].phone1 + "\\", \\"" + result[i].phone2 + "\\", " + "\\"" + result[i].phone3 + "\\", \\"" + result[i].email + "\\", \\"" + result[i].notes.replace(/"/g, "'") + "\\", \\"" + result[i].org.replace(/"/g, "'") + "\\")"; var street = result[i].street; var city = result[i].city; var state = result[i].state; var zip = result[i].zip; var country = result[i].country; var sql3 = "INSERT INTO address (address1, city, state, zip, country) VALUES (" + "\\"" + street + "\\", \\" " + city + "\\", \\"" + state + "\\", \\"" + zip + "\\", \\"" + country + "\\")"; const contacPromise = new Promise((resolve,reject) =>{ connection.query(sql2, function(err, cResult) { if (err) return reject( err); resolve( cResult.insertId); }); }) const addressPromise = new Promise((resolve,reject) =>{ connection.query(sql3, function(err, aResult) { if (err) return reject( err); resolve(aResult.insertId); }); }) Pomise.all([contacPromise,addressPromise]) .then(([contactId,addressId]) =>{ var sql4 = "UPDATE address set contactId = " + contactId + " WHERE (addressId = " + addressId + ")"; connection.query(sql4, function(err, uRes) { console.log("Address updated " + addressId + " " + contactId); }); }) .catch(err => throw err) if (i > 3) break; } }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM