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

Guardar en Dos Tablas Con Una Sola Sentencia SQL

Estas en el tema de Guardar en Dos Tablas Con Una Sola Sentencia SQL en el foro de Mysql en Foros del Web. Cita: Iniciado por gnzsoloyo En realidad tu pregunta es muy habitual. En el último mes y medio han preguntado lo mismo al menos cuatro o ...
  #1 (permalink)  
Antiguo 09/01/2013, 04:31
 
Fecha de Ingreso: abril-2007
Mensajes: 6
Antigüedad: 17 años
Puntos: 0
Respuesta: Guardar en Dos Tablas Con Una Sola Sentencia SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad tu pregunta es muy habitual. En el último mes y medio han preguntado lo mismo al menos cuatro o cinco veces, y en todos los casos la respuesta es la misma: Si tienes dos tablas para cargar, debes hacer dos sentencias INSERT de SQL, una para cada tabla. No hay otra.

Entendamos esto:
1) Lo que hagas en el formulario es irrelevante para la base de datos. Que tengas un sólo formulario no implica que la carga de datos sea en una sola sentencia, ni en una sola tabla (estoy en un proyecto en que un "Submit" de la vista del formulario desencadena 57 INSERTs diferentes en 34 procedimientos, y no exagero).
2) Si tienes dos tablas para cagar datos, tienes dos INSERTs distintos, porque no existe JOIN en el INSERT.
3) Si quieres hacer un sólo envío a la base, usa un procedimiento almacenado en la base que se ocupen de ambos INSERT.
4) Si el segundo depende del éxito del primero, usa TRANSACTIONs o stored procedures. En algunos casos pueden usarse TRIGGERs. Cualquiera de las opciones puede servirte.

Para poder ejemplificarlo con tu propio caso, deberías postear la estructura de las tablas, y decir qué condición de éxito de la primera consulta determina que se haga o no la segunda o se elimine todo.

HOla Gnzsoloyo, a mi me pasa algo parecido al del compañero, pero no llego a entender lo de usar un procedimiento almacenado en la base para que se ocupen de ambos insert.
Soy nuevo en esto, y me he 'atascado' aquí.
Mi pregunta: te refieres a que defina dos variables ($sql y $sql2 con sus instrucciones insert .....) y que haga una tercera variable $resultado(por ejemplo), para que esta sea la que realice el trabajo?
Si es así como sería la sintaxis de dicha instrucción?

Gracias a todos los que haceis esto un poco mas facil.
  #2 (permalink)  
Antiguo 09/01/2013, 04:58
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: Guardar en Dos Tablas Con Una Sola Sentencia SQL

Empecemos por un detalle formal: No resucites temas aunque se traten de cosas que necesites hacer. Serán cerrados sin previo aviso (ver Politicas de Uso).
Por otro lado, no es cortés colgar una pregunta propia en un thread ajeno. Es como meterse en una conversación privada. A nadie le agrada.
Si tus dudas tienen relación, abre un tema nuevo y copia en el mensaje el link al post que quieres relacionar, de modo de que veamos de qué hablas, pero la pregunta debes hacerla en tu propio tread.

Bien, yendo a tu problema, el cómo lo haces desde el punto de vista del PHP no es tema de este foro. Eso se trata en el de PHP (en tu caso).
Lo que sí puedo decirte es que si no conoces el uso de stored procedures, antes de ver cómo se invocan en PHP, deberías leer qué son, para qué sirven, cómo se crean y cómo se usan.
Luego veremos cómo se puede haer lo que quieres, pero siempre que nos postees la estructura de las tablas, sus relaciones y dependencias. Sin eso estaremos hablando en el aire.
Por lo demás, te hago una sola aclaración: Si todos los inserts están dentro de un mismo SP, entonces no son tres llamadas, sino una sola... con todos los parámetros que se ponen para el sp, ya que es el SP el que hará toda la tarea.

http://dev.mysql.com/doc/refman/5.0/...rocedures.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 06:22.