Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nodejs JOIN query: formatting JSON output

I'm making a pretty simple RIGHT JOIN query, but I can't format the output correctly.

Here is the Query:

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);
});

This is the output I have:

[ { 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',
   } ]

And this is the ouput I would like to have:

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

I tried nestTables as you can see,

like image 207
gr3g Avatar asked Oct 30 '25 20:10

gr3g


1 Answers

Wrapped for legibility:

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);
});
like image 186
Tomalak Avatar answered Nov 02 '25 10:11

Tomalak



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!