Foros del Web » Programando para Internet » PHP »

Sobre id autonumerico

Estas en el tema de Sobre id autonumerico en el foro de PHP en Foros del Web. hola, si tengo una tabla XXX con los siguientes campos @id: autonumerico col 1: entera col 2: string y hago un insert INSERT INTO XXX ...
  #1 (permalink)  
Antiguo 26/02/2004, 19:37
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 2 meses
Puntos: 0
Sobre id autonumerico

hola, si tengo una tabla XXX con los siguientes campos

@id: autonumerico
col 1: entera
col 2: string



y hago un insert
INSERT INTO XXX (col1, col2) values ($n, '$txt'); //obviamente el id se inserta solo

Como puedo obtener el id de este ingreso???

(solución 1)
Pensé usar un SELECT MAX(id) FROM XXX, pero si es un sistema multiusuario y "justo" se inserta alguna fila entre mi transacción me daría un id erroneo.
(no tengo ninguna columna en q se ingrese el ip del cliente q hace la transacción)

(solución 2)
Lo otro es hacer: SELECT id FROM XXX WHERE col1=$col1 AND col2='$col2', etc
pero son muchas las columnas de la tabla XXX

Q me recomiendan ustedes?
Conocen alguna otra forma de hacerlo (alguna función q lo haga)??
o si existe algun INSERT (brujo) que lo haga, como ejemplo:

SELECT id FROM XXX WHERE (INSERT INTO XXX (col1, col2) values ($n, '$txt')) //(no creo q funcione)


Estoy usando PHP, ACCESS, y PWS (me obligaron a hacerlo, jaja) con odbc

(Esta pregunta la puse en el foro de php y base de datos)
Gracias
  #2 (permalink)  
Antiguo 26/02/2004, 20:40
Axo
 
Fecha de Ingreso: abril-2003
Ubicación: Virtual
Mensajes: 953
Antigüedad: 21 años
Puntos: 7
Umm mucha coincidencia sería eso creo yo... aunque claro depende de la frecuencia que hagas los insert. Yo quizas haría si tuviera ese problema de tener muchiiiiiiisimos inserts a la vez esto:

antes de insertar nada "consulta del ID maximo y almaceno en $id_maximo1 despues inserto los datos y hago otra consulta con MAX ID y almaceno en $id_maximo2 y asi sakas el id. Aunque creo que haciendo comparacion de algun campo acabas antes... noxe que te conteste algun experto a ver que sugieren
  #3 (permalink)  
Antiguo 26/02/2004, 20:59
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Pues a mi se me ocurre otra idea mas descabellada pero que pudiera funcionar...

1.- Agregale a tu tabla un campo más, llamado por ejemplo insertID (Varchar ó Char ó similar, con 32 caracteres minimo)

Luego, al construir tu query de inserción:
Código PHP:
$queryOriginal="INSERT INTO XXX (tal,campo,etc...,insertID) values ($esto,$aquello,$etc...,'";

// Aqui viene el secreto...
$insertID=md5($queryOriginal);

$queryFinal=$queryOriginal.$insertID."'";

odbc_exec($connID,$queryFinal);

// Y magia!!!
//Query para saber tu ID:

$queryID="select id from XXX where insertID='".$insertID"'"
Espero que al menos sirva para inspirarte una solución mas creativa

Por cierto, si la probabilidad de dumplicados del md5 te hace ruido (Ya sería demasiado) podrías tambien usar el campo insertID junto con un timestamp o algo parecido... Así al consultar harías un "select id from XXX where insertID=$insertID and fechahora=$fechahora"

Bueno, espero haberte ayudado.

__________________
Manoloweb
  #4 (permalink)  
Antiguo 27/02/2004, 19:43
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 2 meses
Puntos: 0
que buena la ultima

eso, voy a ver si me resulta. Gracias
  #5 (permalink)  
Antiguo 01/03/2004, 03:52
 
Fecha de Ingreso: febrero-2004
Mensajes: 15
Antigüedad: 20 años, 2 meses
Puntos: 0
por que no te fijas en la siguinete funcion mysql_insert_id()
  #6 (permalink)  
Antiguo 01/03/2004, 04:11
 
Fecha de Ingreso: febrero-2004
Mensajes: 15
Antigüedad: 20 años, 2 meses
Puntos: 0
perdon, no lei la ultima parte del mensaje, donde dice que trabajas con odbc, esta funcion no te sirve.
  #7 (permalink)  
Antiguo 30/05/2004, 16:11
amj
 
Fecha de Ingreso: marzo-2002
Ubicación: Manizales
Mensajes: 152
Antigüedad: 22 años
Puntos: 1
Yo tengo ese problema y leyendo mucho mucho, no he encontrado mas que estas páginas en este portal, bueno y leyendo todos los mensajes he llegado a la conclusión que lo mejor sería crear la tabla con un campo adicional tipo fecha (larga en acces) (abstime en postgres) y hacer la primera solución que planteas solo que incluyendo este campo de tal manera que ahí sería tecnicamente imposible que ocurriera el problema que mensionas con dicha solución
__________________
"SJ
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 07:39.