Ir al contenido


Foto

Hacer un insert con un select

php mysql

  • Por favor identifícate para responder
8 respuestas en este tema

#1 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 16 febrero 2017 - 07:47

Buenas jovenes

 

Tengo una duda fuerte, estoy haciendo un insert multiple en diferentes tablas. tengo la tabla cliente (idcliente,nombre,emailcliente) tabla vehiculo(idvehiculo,marca,idCliente).

 

Entoces tengo un formulario para ambos, en la clase class.php tengo el query para hacer el insert.

 

$res1=$mysqli->query("INSERT INTO clientes (nombreCliente,emailCliente) VALUES ('$nombreCliente', '$codigoCliente' '$emailCliente')");
 

$res2=$mysqli->query("INSERT INTO vehiculos(marca,idcliente) VALUES ('$marca', '$idcliente')");

 

Datos importantes, ambos estan en la misma funcion, es un ejemplo, leí que podía hacer un select pero no logro comprender bien eso.

 

Lo que busco es que al hacer el primer insert en el segundo pueda insertar ese idcliente ya insertado y usarlo en la segunda tabla.

 

Si alguien sabe me sería de gran ayuda

 

 


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 febrero 2017 - 08:39

Veamos:


sql
  1. INSERT INTO tabla2(campo1,campo2,campo3)
  2. SELECT campo1, campo2, campo3 FROM tabla1 WHERE campo1 = 'algo'

los campos deben ser las misma cantidad de columnas y del mismo tipo y del mismo orden tanto en el INSERT que en el SELECT.

 

Saludos.


  • 0

#3 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 16 febrero 2017 - 09:16

Veamos:


sql
  1. INSERT INTO tabla2(campo1,campo2,campo3)
  2. SELECT campo1, campo2, campo3 FROM tabla1 WHERE campo1 = 'algo'

los campos deben ser las misma cantidad de columnas y del mismo tipo y del mismo orden tanto en el INSERT que en el SELECT.

 

Saludos.

Ah ok, pero eso diciendo que quiero insertar todo lo de la tabla anterior, yo solo quiero 1 dato de la otra tabla que es idcliente los otros datos ya vienen del formulario. Ahí como funcionaria?

 

Gracias


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 febrero 2017 - 09:38

Pues si es así tal como la tienes originalmente, es suficiente, pero veamos, creo no estoy entendiendo del todo, tú quieres ingresar los datos del cliente a través de su id?, danos un poco más de detalles, cual es el funcionamiento del formulario?.


  • 0

#5 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 16 febrero 2017 - 10:09

Pues si es así tal como la tienes originalmente, es suficiente, pero veamos, creo no estoy entendiendo del todo, tú quieres ingresar los datos del cliente a través de su id?, danos un poco más de detalles, cual es el funcionamiento del formulario?.

Vale, ok hice una funcion para hacer un insert multiple, lo que quiero es que cuando se inserta el cliente viste que el idcliente se genera automatico por cada uno de los registros que voy ingresando.

 

Una vez se hace ese insert, el segundo voy a necesitar ese idcliente, solamente el idcliente de la tabla cliente. Ese idcliente en la tabla clientes es una llave primaria y autoincrementable, es por eso que decía lo del select idcliente from clientes where algo='".$algo."'

 

 

Entonces. una vez que se hace ese insert en clientes, hago el insert en vehiculos pero ocupo hacer un select del dato de idcliente para poder insertar ese idcliente en vehiculos.

 

Sería eso, si no se entendiese dimelo por favor y muchas gracias por la ayuda


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 febrero 2017 - 10:22

Pues el tema difiere mucho al contenido jeje, tú quieres obtener el último ID generado por su insert, mysqli tiene una función para ello, simplemente haces lo siguiente:


php
  1. $res1=$mysqli->query("INSERT INTO clientes (nombreCliente,emailCliente) VALUES ('$nombreCliente', '$codigoCliente' '$emailCliente')");
  2. $idcliente = $res1->insert_id; //ó $mysqli->insert_id;
  3. $res2=$mysqli->query("INSERT INTO vehiculos(marca,idcliente) VALUES ('$marca', '$idcliente')");

Saludos.


  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 febrero 2017 - 10:32

Para cosas como éstas es que existen los triggers.

Podrías hacer un procedimiento almacenado que reciba los datos por parámetros que se van a insertar para ambas tablas y que éste se encargue de efectuar las instrucciones INSERTs.

 

Saludos,


  • 0

#8 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 16 febrero 2017 - 11:13

Pues el tema difiere mucho al contenido jeje, tú quieres obtener el último ID generado por su insert, mysqli tiene una función para ello, simplemente haces lo siguiente:


php
  1. $res1=$mysqli->query("INSERT INTO clientes (nombreCliente,emailCliente) VALUES ('$nombreCliente', '$codigoCliente' '$emailCliente')");
  2. $idcliente = $res1->insert_id; //ó $mysqli->insert_id;
  3. $res2=$mysqli->query("INSERT INTO vehiculos(marca,idcliente) VALUES ('$marca', '$idcliente')");

Saludos.

pues si, eso era. Abajo leí que con triggers, estas son las unicas 2 formas que se podría hacer eso??

 

Muchas gracias genio (y)


  • 0

#9 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 16 febrero 2017 - 11:14

Para cosas como éstas es que existen los triggers.

Podrías hacer un procedimiento almacenado que reciba los datos por parámetros que se van a insertar para ambas tablas y que éste se encargue de efectuar las instrucciones INSERTs.

 

Saludos,

Triggers tengo que usarlos mas, voy a pegarles una revisada, gracias genio (y)


  • 0





Etiquetado también con una o más de estas palabras: php, mysql

IP.Board spam blocked by CleanTalk.