Foros del Web » Programando para Internet » PHP »

indice autoincrement

Estas en el tema de indice autoincrement en el foro de PHP en Foros del Web. hola, tengo una grandisima duda. tengo una tabla donde el indice (idtabla) es auto increment y mi pregunta es ¿como obtengo el id que le ...
  #1 (permalink)  
Antiguo 13/06/2006, 11:52
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
indice autoincrement

hola,

tengo una grandisima duda. tengo una tabla donde el indice (idtabla) es auto increment y mi pregunta es ¿como obtengo el id que le toco a ese registro cuando fue insertado?

claro analice y puede darse la situacion que la persona A registre al mismo tiempo que la persona B, ahora mi duda va en ese caso si obtuviera el ultimo id con la consulta ¿ASI?:

$result_insert = mysql_query($query);
$idultimo = mysql_insert_id();

logicamente obtuviera el ultimo registro insertado que podria ser A o B, es que necesito el id para ocuparlo en otra insercion en otra tabla.

Última edición por x_women; 13/06/2006 a las 12:04
  #2 (permalink)  
Antiguo 13/06/2006, 12:29
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
De acuerdo

Especifica que el id sea "unique" para que no tengas problemas.

Ahora bien pues ya le tenias para saber el el id del elemento insertado es con mysql_insert_id()
  #3 (permalink)  
Antiguo 13/06/2006, 12:57
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
creo que no me deje entender:
mi id es unique y auto increment

resulta que al momento de ir a insertar un formulario debo hacerlo en dos tablas diferentes.

tabla a {ida,nombre,titulo}
tabla b {idb,ida,sector}

resulta que al momento de insertar un registro tengo que ir y registrar primero en (tabla a) luego de estar insertado en tabla a con el id que se inserto en (tabla a) ir y añadir varios registros a (tabla b) con el ida que inserte.

lo que yo hago para obtener el ida es:

$result_insert = mysql_query($query); //ejecuto mi consulta para (tabla a)
$idultimo = mysql_insert_id(); //obtengo el ultimo registro de la (tabla a)

¿USTEDES PIENSAN QUE PODRIA OCURRIR ALGUN PROBLEMA SI DOS USUARIOS SE REGISTRAN AL MISMO TIEMPO?
  #4 (permalink)  
Antiguo 14/06/2006, 01:03
Avatar de laran  
Fecha de Ingreso: junio-2006
Ubicación: un lugar muy humedo....agradable...algunos lugares muy bonitos para visitar
Mensajes: 47
Antigüedad: 11 años, 6 meses
Puntos: 0
no creo que haya problema!!!

no creo ayudarte en mucho.....pero tengo un problema similar al tuyo.....tambien necesito datos de una tabla donde tengo que insertar un id y almismo tiempo necesito insertar ese id en otra tabla......bueno solo comentarte que no hay problemas si se registran dos usuarios a la vez.....puesto que como son unique y autoincrementables...es obvio que uno se debe generar despues de otro.......ademas eso lo gestiona php si mi pequeño conocimiento no me falla..........bueno keria pedirte un favor.....si me puedes mostrar tu codigo donde obtienes el ultimo valor insertado del id....te lo agradeceria mucho......byeee
__________________
:cool: [email protected]@N :cool:
  #5 (permalink)  
Antiguo 14/06/2006, 09:59
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
hola,
ojala alguien nos pueda quitar esta duda.
laran ahi esta yo utilizo la funcion:

$idultimo = mysql_insert_id(); //obtengo el ultimo registro de la (tabla a)

lo que no se es si en ese momento esta insertando datos en otra tabla cual id tomo???
  #6 (permalink)  
Antiguo 14/06/2006, 10:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
No creo que tengas problema, ya que mysql_insert_id() te regresa el ultimo ID auto generado PERO de la conexion actual, la conexion no se comparte entre clientes, cada cliente tiene una conexion aparte, asi que no tendrias problema :)
  #7 (permalink)  
Antiguo 14/06/2006, 10:39
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
a bueno gracias por la aclaracion GATORV, entonces creo que me falta aprender mucho de la funcion mysql_insert_id: por q yo tenia el concepto de que devolvia el ultimo id insertado en la tabla.

Sera que me podrias proporcionar un link que hable sobre mysql_insert_id porq cuando busco solo me sale un concepto muy basico. esto para tener mas clara el concepto.
  #8 (permalink)  
Antiguo 14/06/2006, 10:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En realidad para evitar todo tipo de problemas deberías usar una "transacción" a nivel SQL .. eso "bloquearía" esa tabla entre el instante que se realiza tu INSERT y el que se obtiene el último ID para que no pueda ser afectado por otra insercción que genere otro ID autonumérico:

Un tutorial al respecto:
http://www.mysql-hispano.org/page.php?id=26&pag=1


Cita:
GatorV

No creo que tengas problema, ya que mysql_insert_id() te regresa el ultimo ID auto generado PERO de la conexion actual, la conexion no se comparte entre clientes, cada cliente tiene una conexion aparte, asi que no tendrias problema :)
Ese concepto es "valido" para un sesión (www.php.net/sesion) no para un registro autoincremental de una BBDD como Mysql ... Por eso insisto que la única forma de asegurarse de obtener realmente el último ID generado sería con una transacción.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 14/06/2006, 12:14
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
hola y gracias cluster por el link, ya lei y no seria lo mismo usar lock table?.

bueno aunque utilice transacciones no entiendo en que soluciona mi problema mi duda sigue como obtengo mi ultimo id insertado en una tabla determinada, si por lo que entendi el mysql_insert_id() devuelve el ultimo id insertado en la base de datos y las transacciones bloquean la tabla no la base de datos completa. Imaginense que se abra otra conexion y inserten datos en otra tabla...
  #10 (permalink)  
Antiguo 14/06/2006, 12:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por x_women
hola y gracias cluster por el link, ya lei y no seria lo mismo usar lock table?.

bueno aunque utilice transacciones no entiendo en que soluciona mi problema mi duda sigue como obtengo mi ultimo id insertado en una tabla determinada, si por lo que entendi el mysql_insert_id() devuelve el ultimo id insertado en la base de datos y las transacciones bloquean la tabla no la base de datos completa. Imaginense que se abra otra conexion y inserten datos en otra tabla...
Realizar una transacción (BEGIN - COMMIT) vs a bloquear la tabla ("Lock table") la ventaja que tiene es sobre que se puede deshacer la operación (ROLLBACK) si hay algún problema (por ejemplo que no se pueda ejecutar tu INSERT .. o cualquier otra cosa).


Cita:
mi problema mi duda sigue como obtengo mi ultimo id insertado en una tabla determinada,
El uso de esa función ya sea de PHP o de SQL directo se debe usar inmediatamente despues de un INSERT que afecte a una tabla (y sólo una que es lo que haces por sentencia INSERT de SQL) con un campo autoincremental .. Por ende el "ultimo ID" que obtienes es el de la tabla que usó tu INSERT anterior no el de otras tablas interactuando en ese instante.

La forma de uso en SQL sería:
http://dev.mysql.com/doc/refman/5.0/...unique-id.html

No puedes ni debes usar esta función para obtener tu ID último generado tras un SELECT u otra función SQL .. en ese caso tendrías que recurrir a una función tipo MAX() de SQL en una consulta SQL de tipo SELECT y basandote en que usas un campo tipo autoincremental ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 14/06/2006 a las 12:51
  #11 (permalink)  
Antiguo 14/06/2006, 12:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
(Por cierto ... esto es un tema netamente de Mysql y como trabaja ese tipo de campos autoincrementales, la función de "PHP" al respecto es exactamente la misma que su SQL implementa .. Lo digo por si tienes más dudas, habría que mover este mensaje al foro de "Base de datos" por si hay más detalles al respecto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 14/06/2006, 13:00
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
Cita:
No puedes ni debes usar esta función para obtener tu ID último generado tras un SELECT u otra función SQL .. en ese caso tendrías que recurrir a una función tipo MAX() de SQL en una consulta SQL de tipo SELECT y basandote en que usas un campo tipo autoincremental ...
Este mensaje no entendi a que te refieres si podrias ser mas claro te lo agradeceria mucho.
  #13 (permalink)  
Antiguo 14/06/2006, 13:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por x_women
Este mensaje no entendi a que te refieres si podrias ser mas claro te lo agradeceria mucho.
Veamos el problema desde tus necesidades.

¿Cuando necesitas obtener el ID autoincremental generado? ..

Si la respuesta es algo tipo: "quiero saber cual es mi últimio ID de cierta tabla" .. la respuesta es: "usa la función MAX()": SELEC MAX(id) FROM nombre_tabla

Si el caso es: "Acabo de instertar un registro en tabla X y necesito el ID último generado por qué tengo que hacer otro INSERT en otra tabla (para establecer una relación con su clave foránea correspondiente)" .. En ese caso, usa: "mysql_insert_id() de PHP o su equivalente en SQL . con bloqueo de tablas o transacción por seguridad o asumes que no tendras tantos "insert" posibles concurrentes y no usas ni bloqueo de tablas ni transacciones ...".

En que caso estás tu? .. Ves claro que la función mysql_insert_id() sólo sirve y dá el resultado esperado usandola inmediatamente despues de un INSERT?


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 14/06/2006, 13:13
 
Fecha de Ingreso: abril-2005
Ubicación: en Santa Cruz - España
Mensajes: 429
Antigüedad: 12 años, 8 meses
Puntos: 1
gracias por ser tan explicito.

y ahora si es que yo me encuentro en el caso 2.
  #15 (permalink)  
Antiguo 14/06/2006, 13:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si estás en el 2° caso .. (que haces un INSERT y necesitas el ID generado para otros fines) tendrás que usar la función comentada de PHP o equivalente en SQL.

El tema es claro .. tu haces un INSERT a una Tabla (no a varias a la vez .. en ese caso se separaría en sentencias INSERT individuales ...) .. la función mysql_insert_id() te genera el del inmediatamente anterior INSERT que se hizo en ese recurso (conexión).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 22:42.