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

insertar ID

Estas en el tema de insertar ID en el foro de Mysql en Foros del Web. holaa todosss tengo esta consulta Código PHP: INSERT INTO usuarios  ( IDusuario ,  nombre )  VALUES  ( SELECT MAX ( IDusuario )+ 1  as  IDusuario FROM usuarios , 'diego' )  ...
  #1 (permalink)  
Antiguo 12/10/2005, 09:51
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
insertar ID

holaa todosss
tengo esta consulta

Código PHP:
INSERT INTO usuarios (IDusuarionombreVALUES (SELECT MAX(IDusuario)+as IDusuario FROM usuarios,'diego'
y no me funciona... sera que no se puede usar una subconsulta en mysql?
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 12/10/2005, 12:51
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
prueba con esto:
Código:
INSERT INTO usuarios (IDusuario, nombre)
SELECT MAX(IDusuario)+1, 'diego' FROM usuarios
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #3 (permalink)  
Antiguo 12/10/2005, 17:04
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
mm nop, tampoco me funciono...
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX(IDusuario)+1, 'gomez', '4', '25', '2

que puede ser? probe poniendo el SELECT MAX entre comillas simples
pero me da error tambien, sera que no se puede en mysql?
__________________
On error no hago nada porque deje de fumar...
  #4 (permalink)  
Antiguo 12/10/2005, 17:13
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
que yo sepa si se puede. el formato para insertar campos desde un select seria algo asi:
Código:
insert into tabla1 (campo1, campo2, campo3)
select campo1, campo2, campo3
from tabla2
en el caso anterior mysql ejecuta el select y los resultados los guarda en la tabla "tabla1".
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #5 (permalink)  
Antiguo 12/10/2005, 17:22
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
es que no quiero hacer un select
lo que quiero es hacer ese subselect solo para obtener el id del ultimo registro, sumarle uno y ahi cargarle este id al registro que estoy cargando
no estoy usando auto_increment
__________________
On error no hago nada porque deje de fumar...
  #6 (permalink)  
Antiguo 12/10/2005, 19:24
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
con esto:
Código:
(SELECT MAX(IDusuario)+1 as IDusuario FROM usuarios,'diego')
obtienes los mismos resultados que con esto:
Código:
SELECT MAX(IDusuario)+1, 'diego' as IDusuario FROM usuarios
si ejecutas la ultima select, veras que obtienes un registro con dos campos.
estos dos valores son los que deberias insertar en tu tabla, si no entendi mal.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #7 (permalink)  
Antiguo 13/10/2005, 01:45
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Si tienes definido el id como auto_increment, ya no tienes que hacer nada, pues el propio gestor se encarga de darle el valor siguiente. La instrucción sería:
Código:
insert into usuarios (nombre) values ($nombre)
Un saludo.
__________________
Estoy contagiado de Generación-I
  #8 (permalink)  
Antiguo 13/10/2005, 05:44
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
es que ese es el problema y NO estoy usando AUTO_INCREMENT
Haron.. esto no me funciono
(SELECT MAX(IDusuario)+1 as IDusuario FROM usuarios,'diego')
probe sacandole el FROM usuarios.. pero .. tampoco
gracias por contestar a todos ya lo vamos a encontrar... he revuelto la documentacion de mysql sin encontrar nada.. y esto creo es algo comun
__________________
On error no hago nada porque deje de fumar...
  #9 (permalink)  
Antiguo 13/10/2005, 08:38
Avatar de 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.
  #10 (permalink)  
Antiguo 13/10/2005, 09:12
 
Fecha de Ingreso: julio-2005
Ubicación: Mexico
Mensajes: 140
Antigüedad: 18 años, 9 meses
Puntos: 0
dieguicho, por que no estas usando el IDusuario como increment?. Si no te (conviene por alguna razon que no veo clual). Estoy casi segulro que MySQL no permite subconsultas. Y si optas por usar el script en php tiene riesgos y mas aun si muchos usuarios pueden insertar al mismo tiempo. Mejor una autoincrement¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  #11 (permalink)  
Antiguo 14/10/2005, 13:57
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
porque ya esta todo armado asi y me da fiaca cambiar toooodo a auto_increment

por otro lado.. les cuento que hice dos consultas separadas
1 para obtener el id
y la otra para insertar todos los datos con este nuevo id
pero obtengo el siguiente error
" Column count doesn't match value count at row 1 "

el codigo para eso es el siguiente

$generarIDusuario = mysql_query("SELECT MAX(IDusuario) FROM usuarios",$connection);
$IDnuevousuario = mysql_result($generarIDusuario,0,0)+1;

estoy haciendo algo mal??
__________________
On error no hago nada porque deje de fumar...
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 02:39.