Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como puedo tomar un id (primary key) de un campo que acabo de cargar para usarlo

Estas en el tema de Como puedo tomar un id (primary key) de un campo que acabo de cargar para usarlo en el foro de Mysql en Foros del Web. Como estan? estoy realizando la carga de unas ordenes, las mismas llevan marca modelo numero de serie y demás. Dichas ordenes en la base de ...
  #1 (permalink)  
Antiguo 01/07/2013, 19:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 16 años, 2 meses
Puntos: 0
Como puedo tomar un id (primary key) de un campo que acabo de cargar para usarlo

Como estan? estoy realizando la carga de unas ordenes, las mismas llevan marca modelo numero de serie y demás.

Dichas ordenes en la base de datos se identifican con un ID que está como PRIMARY KEY y es auto_increment.

Ahora bien, al momento de realizar la carga necesito tomar ese ID de la base de datos para registrar el movimiento que lo tengo en otra tabla.

El problema es que el ID de la orden es el único valor que no puede llegar a repetirse dentro de la tabla de ordenes entonces no encuentro la forma de tomar ese valor, ya que si hago referencia a otros valores de los que acabo de tomar para llamar a esa fila tengo una pequeña posibilidad de que haya 2 campos iguales.

Bien dejo aquí las tablas de Ordenes y de Movimientos que son las que estoy tratando ahora mismo.

Código MySQL:
Ver original
  1. ordenes(
  2. id_cliente int unsigned NOT NULL,
  3. marca varchar(20),
  4. modelo varchar(20),
  5. numserie varchar(40) NOT NULL,
  6. procedencia int unsigned NOT NULL,
  7. categoria int unsigned NOT NULL,
  8. servicio int unsigned NOT NULL,
  9. precio decimal(6,2),
  10. detalles varchar(255),
  11. garantia int,
  12. PRIMARY KEY (orden),
  13. INDEX (numserie),
  14. FOREIGN KEY (id_cliente) REFERENCES clientes(id_clientes),
  15. FOREIGN KEY (procedencia) REFERENCES locales(id_locales),
  16. FOREIGN KEY (categoria) REFERENCES categ_servicios(id_categservicios),
  17. FOREIGN KEY (servicio) REFERENCES servicios(id_servicios)
  18. );
  19.  
  20. CREATE TABLE IF NOT EXISTS movimientos(
  21. fecha DATETIME,
  22. movimiento varchar(2),
  23. FOREIGN KEY (ORDEN) REFERENCES ordenes(ORDEN)
  24. );

La idea es que dependiendo el momento pueda registrar movimientos en esa tabla en referencia a la misma orden.

Mi problema reside en la primer carga que realizo de una orden. Al cargar la orden no se que número le toca, motivo por el cual no puedo utilizar dicho ID para localizarla. entonces me he trabado jaja...

En sintesis lo que necesito es que al realizar la carga de alguna forma pueda tomar el ID de la orden que vendría siendo el campo ORDEN de la tabla ordenes.

Así cargo una orden en la tabla
Código MySQL:
Ver original
  1. INSERT INTO ordenes (clave,id_cliente,marca,modelo,numserie,procedencia,categoria,servicio,precio,detalles)
  2. VALUES ('$clave','$idcliente','$marca','$modelo','$numserie','$procedencia','$categoria','$servicio','$precio','$detalles')

luego necesito registrar por ejemplo el primer movimiento de la orden que es que está fue cargada pero no puedo porque desconozco el número de orden que se le autoasigno jaja.

Código MySQL:
Ver original
  1. INSERT INTO movimientos VALUES ('¿¿¿ORDEN???',NOW(),'1')

Resumiento lo que necesito es tomar el valor de ORDEN de la orden de trabajo que acabo de cargar.

Muchas gracias a quien pueda ayudarme!
  #2 (permalink)  
Antiguo 02/07/2013, 01:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Como puedo tomar un id (primary key) de un campo que acabo de cargar para

Si tienes una operación que implica varias querys que dependen una de otras y necesitas que ademas no tengas interferencias de otros usuarios debes trabajar el tema de las transacciones

Dentro de la transaccion podrás usar la función LAST_INSERT_ID() para obtener el id de la orden recien cargada.

Esquema

INICIO TRANSACCION

INSERT <--- la nueva orden

SELECT LAST_INSERT_ID()

INSERT <--- el movimiento

FIN TRANSACCION

Lee los dos links que te dejo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 23/07/2013, 15:30
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo tomar un id (primary key) de un campo que acabo de cargar para

Como bien indica quimfv debes usar LAST_INSERT_ID()

INSERT INTO ordenes (clave, id_cliente, marca, modelo, numserie, procedencia, categoria, servicio, precio, detalles)
VALUES ('$clave', '$idcliente', '$marca', '$modelo', '$numserie', '$procedencia', '$categoria', '$servicio', '$precio', '$detalles');

-- En el segundo Insert agregas la funcion:

INSERT INTO movimientos VALUES (LAST_INSERT_ID(), NOW(), '1');

Etiquetas: campo, insert, key, primary, tabla, tomar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:31.