【问题标题】:Node MYSQL How can I get a joined table in its own object?Node MYSQL 如何在自己的对象中获取连接表?
【发布时间】:2016-02-23 22:37:30
【问题描述】:

我目前正在使用这个 SQL 查询:

var sqlQuery = `
    SELECT user.ID, user.email, user.first_name, user.last_name,
    user.address1, user.address2, user.country, user.gender, chars.sID, chars.name,
    chars.experience, chars.locked  
    FROM subscriber AS user 
    LEFT JOIN chars on user.ID = chars.sID
    WHERE user.ID = ?
`;

效果很好,我得到了这种风格的结果:

RowDataPacket {
[1]     ID: 13,
[1]     email: 'fakeemail@email.com',
[1]     first_name: null,
[1]     last_name: null,
[1]     address1: null,
[1]     address2: null,
[1]     country: null,
[1]     gender: null,
[1]     sID: 13,
[1]     name: 'CharName',
[1]     experience: 0,
[1]     locked: 'N' }

唯一的问题是我得到了数据库中每个chars 的结果,我只需要订阅者一次,然后我需要很多chars

但是我怎样才能得到它,所以我最终得到了类似的东西

RowDataPacket {
    field: blah,
    field: blah,
    charData: {
        name: 'CharName',
        locked: 'N'
    }
}

我希望连接的数据位于它自己的对象中。任何信息都将非常感谢。

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    MySql 总是返回原始数组。如果你想要这样的东西,你需要根据你的需要对其进行格式化。 有一些库可以帮助你点赞lodash,但这并不难

    您可以通过遍历数组中的所有行并将其添加到另一个对象来解决它 另一个对象result 将拥有订阅者的电子邮件和 charsData 数组的键。

    例如:

     result={
        'subscriber1@gmail:{
            'field: blah,
            field: blah,
            charsData: [{
                name: 'CharName',
                locked: 'N'
                },{
                    name: 'CharName2',
                    locked: 'l'
            }]
        },
        'subsriber2@yahoo':{
            Another Subscriber
        }
    }
    

    守则:

    var result={}
    var input=YourArrayFromMySQL
    
    for(var i=0;i<input.length;i++){
        var thisLine=input[i]
    
        //Copy the char to new variable
        var thisChar=   {
                name:thisLine.name,
                locked:thisLine.locked
                    }
    
        //Delete the char from the subscribe line               
        delete thisLine.name
        delete thisLine.locked
    
        //If this subscriber not exsists in the result, create it, with empty array
        if(!result[thisLine.email]){
            result[thisLine.email]=thisLine
            result[thisLine.email].charsData=[]
        }
    
        // Add to the matching subscriber the char
        result[thisLine.email].charsData.push(thisChar)
    }
    

    【讨论】:

    • 看起来很老套,但谢谢我会标记为答案,除非有其他事情很长。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2013-10-15
    • 2021-07-04
    相关资源
    最近更新 更多