2016-09-19 2 views
1

MySql right join에서 오는 행 배열을 nodeJS의 array/json 형식으로 변환하려고합니다. 고려 일반적인 MySQL의 테이블 :SQL right join to JSON/array

emp_id name 
1  john 
2  bill 
3  anna 


fk_emp_id project 
1   p1 
1   p2 
1   p3 
2   p1 
2   p4 

그리고 권리는 그들 가입 :

id name fk_emp_id project 
1 john 1  p1 
1 john 1  p2 
1 john 1  p3 
2 bill 2  p1 
2 bill 2  p4 
3 anna 3  null 

어느 :

result = [ 
    {id: '1', 
    name: 'john', 
    projects: [p1, p2, p3] 
    } 
    , 
    {id: '2', 
    name: 'bill', 
    projects: [p1, p4] 
    } 
    , 
    {id: '3', 
    name: 'anna', 
    projects: [] 
    } 
] 
:

rows = [ 
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p1"}, 
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p2"}, 
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p3"}, 
    {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p1"}, 
    {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p4"}, 
    {"id":3, "name":"anna", "fk_emp_id" : "3" , "project" : null} 
] 

나는이 JSON으로 변환하려면 어떻게

+0

당신은 JSON 포맷으로 변환 URL을 아래에서 JSON-lib 디렉토리를 사용할 수 있습니다. http://json-lib.sourceforge.net/ – Karpak

답변

1

버전 t 만 찾는 경우 o rowsresult 배열로 변환하면 주어진 id의 참조를 위해 해시 테이블로 Map을 사용할 수 있습니다.

var rows = [{ id: 1, name: "john", fk_emp_id: "1", project: "p1" }, { id: 1, name: "john", fk_emp_id: "1", project: "p2" }, { id: 1, name: "john", fk_emp_id: "1", project: "p3" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p1" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p4" }, { id: 3, name: "anna", fk_emp_id: "3", project: null }], 
 
    result = []; 
 

 
rows.forEach(function (a) { 
 
    var reference = this.get(a.id); 
 
    if (!reference) { 
 
     reference = { id: a.id, name: a.name, fk_emp_id: a.fk_emp_id, projects: [] }; 
 
     this.set(a.id, reference); 
 
     result.push(reference); 
 
    } 
 
    a.project && reference.projects.push(a.project); 
 
}, new Map); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }