Mysql Insertar varias filas con valores separados por comas con instrucción sql sola

La intención de ejecutar varias sentencias de inserción sql sin ejecutarlas en algún tipo de bucle en node.js, etc.

Una statement sql típica se ve así.

INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?); INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?); 

O

 INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?), (?, ?); 

El loop node.js ordinario se ve así.

 for (var i = 0; i < request.body.length; i++) { queryRequest.sql += "INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?);"; queryRequest.values.push(request.body[i].id, request.params.id); } 

Intención / Pregunta:

Explorando una forma si es posible para pasar request.body a un SQL inteligente que toma la matriz en sí o tal vez una list de valores separados por comas e inserte varias filas desde allí sin el bucle node.js.

request.body ve así (modificable para cumplir con los requisitos)

 [ { "id": 12 }, { "id": 34 } ] 

Sí, esto es posible Eche un vistazo a esta reference. https://dev.mysql.com/doc/refman/5.7/en/json.html

Esto es lo que puedes hacer.

  1. Seleccione su información de object
  2. Convertir a matriz
  3. Unnest the array (haz una matriz en la vista de columna) reference: function UNNEST en MYSQL como POSTGRESQL , esta function necesita una cadena para convertir tus datos (matriz) en datos (cadena). Aquí hay una reference: ¿Hay un MySQL equivalente a PostgreSQL array_to_string
  4. Use la insert into select reference de insert into select : https://dev.mysql.com/doc/refman/5.1/en/insert-select.html

Al final, tu código es algo como esto:

 insert into session_speaker(session_id, speaker_id) select unnest_mysql ( arrayToString (dataTOArray( stringtojson (json_string) ) ) ) 

json_string = estos son tus datos de php

dataTOArray = esta function convierte tus datos a mysql json en array

dataTOArray = esto es para convertir una matriz a una cadena ex. [1,2,3] a '1,2,3' unnest_mysql = su cadena para remar datos

  string '1,2,3' --view like |-------String-----| |---------1--------| |---------2--------| |---------3--------| |----------- ------| So when you insert this , it will become row in your table 

Nota: Cambie mi function a la function específica de MySQL.

Creo que esto me acerca a lo que estoy buscando.

https://github.com/felixge/node-mysql/issues/814

Según dougwilson comenta allí y su solución para matrices anidadas, simplemente puedo pasar la matriz de objects múltiples a la consulta e insertá múltiples loggings a la vez.

 var currentLogs = [ [ 'Server', 'Socketio online', 'Port 3333', '2014-05-14 14:41:11' ], [ 'Server', 'Waiting for Pi to connect...', 'Port: 8082', '2014-05-14 14:41:11' ] ]; pool.query('INSERT INTO logs_debug (socket_id,message,data,logged) VALUES ?', [currentLogs])