Search code examples
javascriptmysqlnode.jsjsonnode-mysql

How to insert multiple rows from JSON structure to MySQL column


I need to insert multiple json value into a mysql column. Here I have a table named client

query = ' INSERT INTO client (user_id,client_id,tenant_id) values ?'
let queryClient = []
queryClient.push(clientData.user_id)
queryClient.push(clientData.client_id);
queryClient.push(clientData.tenant_id);

Before that I assigned req.body into clientData

Here is the connection to the mysql database

var queryMapClientIn = mysql.format(query, [queryClient])
const newMapClient = await conPool.query(queryMapClientIn, function (err, result) {
  if (err) throw err;
  console.log("Number of records inserted: " + result.affectedRows);
});

This is the code and json data is:

{
    "user_id" : 101,
    "client_id": 999,
    "tenant_id" : 1,
    "additionalClient" : [
        {"user_id" : 130},
        {"user_id" : 131}
    ]
}

Here is the json data and i need to push multiple user_id into user_id column on sql table. Can I get to know how to insert multiple user_id on this table.


Solution

  • You can create a 2-dimensional array to insert multiple rows.

    let clientData = {
        "user_id" : 101,
        "client_id": 999,
        "tenant_id" : 1,
        "additionalClient" : [
            {"user_id" : 130},
            {"user_id" : 131}
        ]
    };
    let queryClient = [[clientData.user_id, clientData.client_id, clientData.tenant_id]];
    if (clientData.additionalClient) {
        let additionalClients = clientData.additionalClient.map(({user_id}) => [user_id, clientData.client_id, clientData.tenant_id]);
        queryClient = queryClient.concat(additionalClients);
    }
    
    let query = 'INSERT INTO client (user_id,client_id,tenant_id) values ?';
    const newMapClient = await conPool.query(query, queryClient, function (err, result) {
      if (err) throw err;
      console.log("Number of records inserted: " + result.affectedRows);
    });