Tema: insertar ID
Ver Mensaje Individual
  #9 (permalink)  
Antiguo 13/10/2005, 08:38
Avatar de haron
haron
 
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
vale, ya entiendo tu problema.

en ciertas versiones puedes crear sentencias de "insert" y "update" en las cuales puedes repetir el nombre de la tabla en la que vas a insertar o acualizar datos, pero en otras versiones anteriores no.

si estas usando PHP + MySQL, el problema del que me hablas lo solucione asi:
Código:
PHP:
function getNewKey($key_name, $table_name) {
	global $CONN;
	
	$sql = "
	select max(".$key_name.")
	from `".$table_name."`";
	$result = mysql_query($sql, $CONN);
	$row = mysql_fetch_row($result);
	$new_key = $row[0] + 1;
	return $new_key;
}
la funcion anterior te devolvera el siguiente "id" de cualquier tabla:
Código:
echo getNewKey("idUsuario", "usuarios");
si quieres insertar un nuevo registro, puedes hacer:
Código:
define("MYSQL_DUPLICATE_ENTRY_ERROR", "1062");  // registro duplicado

$nombre = "Diego Armando Maradona";
for ($i = 0; $i < 100; $i ++) {
	$idUsuario = getNewKey("idUsuario", "usuarios");
	$sql = "
	insert into usuarios(idUsuario, nombre)
	values(".$idUsuario.", '".$nombre."')";
	mysql_query($sql, $CONN);
	$errno = mysql_errno($CONN);
	if (($errno > 0) && ($errno != MYSQL_DUPLICATE_ENTRY_ERROR))
		break;
}
el numero de intentos en el "for" anterior se debe a que justo en el momento en que obtienes el nuevo "id", podria darse el caso que algun otro usuario se adelantase, robandote de esta forma el "id" y fracasando la insercion. por eso se intenta al menos 100 veces. y si despues de cien intentos no lo has conseguido... mala suerte.

seguro que hay otras formas de hacerlo. si a alguien se lo ocurre alguna otra, tambien me vendria bien saberlo.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.