Javascript 从联接查询中取消设置嵌套数据
我有一系列嵌套对象,它们包含在一对多关系表示的关系数据库中 给定一个连接查询的结果集,如以下所示,其中obj a包含多个B,而B又包含多个C,C又包含多个D。以下是查询:Javascript 从联接查询中取消设置嵌套数据,javascript,mysql,Javascript,Mysql,我有一系列嵌套对象,它们包含在一对多关系表示的关系数据库中 给定一个连接查询的结果集,如以下所示,其中obj a包含多个B,而B又包含多个C,C又包含多个D。以下是查询: SELECT A_ID AS A, B_ID AS B, C_ID AS C, D_ID AS D FROM A INNER JOIN B on B.A_ID = A.A_ID INNER JOIN C ON C.B_ID = B.B_ID INNER JOIN D ON D.C_ID = C.C_ID 查询结果如下:
SELECT A_ID AS A, B_ID AS B, C_ID AS C, D_ID AS D FROM A
INNER JOIN B on B.A_ID = A.A_ID
INNER JOIN C ON C.B_ID = B.B_ID
INNER JOIN D ON D.C_ID = C.C_ID
查询结果如下:
| A | B | C | D |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 1 | 1 | 2 | 2 |
| 1 | 2 | 3 | 3 |
| 1 | 2 | 3 | 4 |
我想生成一个类似这样的JSON对象。请注意,只有一个A对象,由于内部联接,每行中的数据相同。A对象包含两个B对象。第一个B包含两个C,第二个B仅包含一个包含两个D的C。唯一唯一的数据实际上是D,但每行包含层次结构中的所有数据:
{
"A": {
"A_id": 1,
"Bs": [{
"B_id": 1,
"Cs": [{
"C_id": 1,
"Ds": [{
"D_id": 1
}]
},{
"C_id": 2,
"Ds": [{
"D_id": 2
}]
}]
},{
"B_id": 2,
"Cs": [{
"C_id": 3,
"Ds": [{
"D_id": 3
},{
"D_id": 4
}]
}]
}]
}
}
在javascript中,最简单和最有效的方法是什么?请注意,最简单的方法可能涉及使用underline.js或lodash等库
数据已以如下形式返回:
[{A_id:1, B_id:1, C_id:1, D_id:1},{...}]
我们就是这样做的:
var A = { Bs: []};
var Bs = {};
var Cs = {};
var Ds = {};
_.each(results, function(r) {
var B = Bs[r.B_ID];
if(!B) {
B = {id: r.B_ID, Cs:[]};
A.Bs.push(B);
B[r.B_ID] = B;
}
var C = Cs[r.C_ID];
if(!C) {
C = {id: r.C_ID, D:[]};
B.Cs.push(C);
Cs[r.C_ID] = C;
}
var D = Ds[r.D_ID];
if(!D) {
D = {id: r.D_ID};
C.Ds.push(D);
Ds[r.D_ID] = D;
}
}
就我个人而言,我没有看到输入和输出之间的关系。澄清将有所帮助