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

Recuperar valor autoincrementable.

Estas en el tema de Recuperar valor autoincrementable. en el foro de Bases de Datos General en Foros del Web. Hola, estoy usando ADOdb para acceder a la base de datos de una aplicación PHP que estoy desarrollando. En una parte de la aplicación existe ...
  #1 (permalink)  
Antiguo 06/04/2007, 20:16
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 20 años, 1 mes
Puntos: 1
Recuperar valor autoincrementable.

Hola, estoy usando ADOdb para acceder a la base de datos de una aplicación PHP que estoy desarrollando.

En una parte de la aplicación existe un formulario para dar de alta en el sistema a una persona. Dicha persona tendrá un identificador, el cual es un valor autoincrementable.

Está claro que cuando haga el insert ese valor se asignará automáticamente y todo será correcto...

...pero yo quiero saber ese valor antes de rellenar el formulario para
que aparezca en él...

¿Hay alguna forma de saber cuál será el siguiente autoincrementable?

De momento me sirve esto:

Código PHP:
$id $db->connection->Execute("SELECT COUNT(id) as id FROM persona");
$id $id->fields["id"] + 1
es decir, contar cuantos registros hay e incrementar en uno el valor (me sirve porque no habrá posibilidad de eliminar registros de esa tabla), pero me parece un poco inapropiado.

He buscado por el foro y por Internet y lo más parecido que he encontrado ha sido eso.

¿Alguien conoce alguna manera mejor? ¿O un método con ADOdb que lo haga?

Muchas gracias.
  #2 (permalink)  
Antiguo 06/04/2007, 23:25
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Re: Recuperar valor autoincrementable.

pues la idea seria traer como bien tu codigo lo hace el ultimo id y sumarle 1 ahora bien como sabes que trae el ultimo y no el primero :o pues debes agregar un ORDER BY desc en tu caso para que traiga siempre el ultimo...

otra pregunta estas dispuesto a perder id's ?
lo digo por el tema de que que pasa si dos personas quieren ingresar datos y una persona entra al formulario pero no ha ingresado nada aún, entonces tiene el valor id 3 y otra persona entra tambien al formulario y como no a habido ningun ingreso, tambien obtiene el valor 3 ? tonces gana quien primero ingrese y al otro de dara fatal error :/
pues te lo digo por que debes parchear eso y como lo consigues pues perdiendo id's y como eso pues la persona que entra al formu gana un id y lo inserta de forma inmediata entonces al ingresar el formulario completo solo actualiza lo correspondiente al id... entonces si una persona entro ya gana el id 3 y puesto en base de datos para cual si otra persona en el proceso ingresa obtendria el valor 4, y como pierdes id's pues si la persona ingresa al formu pero no hace nada e hay tu perdida de id's...
ahora decides tu como lo implementas, tambien puedes generar ids no autoincrementables de forma aleatoria y que sean diferentes alos que estan en base de datos es otra opcion ids de numeros grandes con dificultades de repeticion ;)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 11/04/2007, 10:47
Avatar de yournightmare86  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años, 7 meses
Puntos: 9
Re: Recuperar valor autoincrementable.

Pues lo que se me ocurre(sin saber para que quieres saber el próximo código) es usar una función PHP que te devuelve el último valor de un campo autoincrementable.
Código:
$ultimo_codigo=mysql_insert_id();
De todas formas revisa tu idea, porque para esos códigos no siempre va de uno en uno y en orden ascendente. En ocasiones se salta números, por una cuestión o por otra. Utiliza el valor que quieres en función de como más optimizado y fácil le sea.
Saludos.
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:08.