2015-04-02 158 views
0

我正在做一个非常简单的RIGHT JOIN查询,但我无法正确格式化输出。Nodejs JOIN查询:格式化JSON输出

下面是该查询:

connection.query({sql : "SELECT users.*, rides.* FROM users RIGHT JOIN rides ON users.id = rides.id_user WHERE users.id = ?", nestTables: '_', values : [id] }, function(err, rows){ 
    console.log(rows); 
}); 

这是输出我有:

[ { users_id: 52, 
    users_firstname: 'greg', //End first table data 
    rides_latitude: '50.847454', //Second table data: row 1 
    rides_longitude: '4.358356', 
    }, 
    { users_id: 52, 
    users_firstname: 'greg', //Exactly the same first table data 
    rides_latitude: '50.9', //Second table data: row 2 
    rides_longitude: '4.4', 
    } ] 

这是我想拥有的输出中:

[ { users_id: 52, 
    users_firstname: 'greg', 
    rides : [ 
     { 
     rides_latitude: '50.847454', 
     rides_longitude: '4.358356' 
     }, 
     { 
     rides_latitude: '50.9', 
     rides_longitude: '4.4' 
     } 
    ] 
    }] 

我试着如您所见,nestTables

+0

您需要遍历结果并构建自定义json结构。 – 2015-04-02 11:59:18

+0

你确定没有任何格式化的输出选项? – gr3g 2015-04-02 12:00:44

+0

据我所知,使用express和mysql连接的结果是,你得到的是一个标准的,其中数据用'key:val'格式表示。现在您需要根据需要自定义结果,或者检查是否有一些中间件或辅助模块可用于此目的。 – 2015-04-02 12:22:18

回答

1

包装易读性:

connection.query({ 
    sql : "SELECT \ 
       users.users_id, \ 
       users.users_firstname, \ 
       rides.rides_latitude, \ 
       rides.rides_longitude \ 
      FROM \ 
       users \ 
       RIGHT JOIN rides ON users.id = rides.id_user \ 
      WHERE \ 
       users.id = ?", 
    nestTables: '_', 
    values : [id] 
}, function (err, rows) { 
    var result = [], index = {}; 

    if (err) throw err; 

    rows.forEach(function (row) { 
     if (!(row.users_id in index)) { 
      index[row.users_id] = { 
       users_id: row.users_id, 
       users_firstname: row.users_firstname, 
       rides: [] 
      }; 
      result.push(index[row.users_id]); 
     } 
     index[row.users_id].rides.push({ 
      rides_latitude: row.rides_latitude, 
      rides_longitude: row.rides_longitude 
     }); 
    }); 

    console.log(result); 
});