我目前正在使用此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'
}
}
我希望连接的数据位于自己的对象中。任何信息都会非常感谢。
答案 0 :(得分:0)
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)
}