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

Duda con el INSERT

Estas en el tema de Duda con el INSERT en el foro de Mysql en Foros del Web. Buenas a todos, Yo tengo 15 tablas. Cuando un usuario se registra, se agregan todos los datos que escribio a la tabla ´users´. Pero a ...
  #1 (permalink)  
Antiguo 11/02/2010, 09:21
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 3
Exclamación Duda con el INSERT

Buenas a todos,

Yo tengo 15 tablas. Cuando un usuario se registra, se agregan todos los datos que escribio a la tabla ´users´. Pero a su vez, tienen que agregarse una fila en cada una de las otras tablas, como la tabla ´recursos´.
En esta última solo se agregaria el ´id_user´ y todo lo demas en 0.

Mi pregunta es, como puedo hacer para escribir todo en un query y no en 15 queries.

Actualmente hago:

INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."')"
$query = mysql_query("SELECT * FROM users WHERE username = '".$username."'");
$datos = mysql_fetch_array($query);
INSERT INTO recursos (id_user) VALUES ('".$datos['id_user']."'")
INSERT INTO esc (id_user) VALUES ('".$datos['id_user']."'")
INSERT INTO hos (id_user) VALUES ('".$datos['id_user']."'")

etc.....

¿Como puedo optimizar este codigo que la verdad esta feucho?

Espero su respuesta

Gracias,
Ale
  #2 (permalink)  
Antiguo 11/02/2010, 09:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda con el INSERT

A mi no me parece "feucho".
Es lo que comunmente se hace.

Sin embargo, como opción alternativa, puedes hacer un trigger para que automaticamente se inserten los datos en las otras tablas al detectar un insert en la tabla users.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/02/2010, 10:14
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 3
De acuerdo Respuesta: Duda con el INSERT

Bueno, estuve investigando un poco esto de los triggers...la verdad esta muy bueno..no tenia ni idea de su existencia.

Hice esto:

CREATE TRIGGER trigger_recursos AFTER INSERT ON users
FOR EACH ROW
INSERT INTO recursos(id_user)
VALUES (CURRENT_USER())

Ahora, me gustaria cambiar ese CURRENT_USER() por la id_user de la tabla users. Escribi users.id_user pero me tiro error.

Alguna sugerencia?
  #4 (permalink)  
Antiguo 11/02/2010, 10:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda con el INSERT

ok

Esto se maneja con los parametros new y old.

Puedes hacerlo así
CREATE TRIGGER trigger_recursos AFTER INSERT ON users
FOR EACH ROW
INSERT INTO recursos(id_user)
VALUES (new.id_user)


Puedes incluir en el mismo trigger todas las tablas que requieras insertar la misma información.

saludos ale123
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 11/02/2010, 10:36
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Duda con el INSERT

Sos un genio, muchisimas gracias!!
Cualquier cosa recurro a vos.
  #6 (permalink)  
Antiguo 11/02/2010, 14:01
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Duda con el INSERT

Te hago una pregunta mas.
Supongamos que yo quiero que al haber un nuevo registro en la tabla users, se cree 1 registro en las 15 tablas, tabla a, b, c, d, e, f...etc

Como hago ?

CREATE TRIGGER trigger_recursos AFTER INSERT ON users
FOR EACH ROW
INSERT INTO recursos(id_user)
VALUES (new.id_user)
  #7 (permalink)  
Antiguo 11/02/2010, 14:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda con el INSERT

15 INSERTs, uno para cada tabla...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/02/2010, 14:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda con el INSERT

ale123, tal como dice gnzsoloyo el trigger en su cuerpo realizará cuantas sentencias requieras para la acción ejecutada por el mismo.

Por ejemplo
CREATE TRIGGER trigger_recursos AFTER INSERT ON users
FOR EACH ROW
INSERT INTO recursos(id_user)
VALUES (new.id_user);
INSERT INTO a(id_user)
VALUES (new.id_user);
INSERT INTO b(id_user)
VALUES (new.id_user);
INSERT INTO c(id_user)
VALUES (new.id_user);
INSERT INTO d(id_user)
VALUES (new.id_user);
end;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 11/02/2010, 18:16
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Duda con el INSERT

Ahhh buenisimo, me faltaba el ; y el end. Gracias chicos, a todos por la ayuda.

Etiquetas: insert
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:25.