Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/02/2017, 19:13
Avatar de sebandrescc2
sebandrescc2
 
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Funcion Delete en 5 tablas en 1 consulta

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola sebandrescc2:

Efectivamente, puedes eliminar registros de esta forma, aunque no te lo recomiendo... esta forma de hacer múltiples eliminaciones utilizando JOIN's se mantiene por estándar de MySQL, pero no todos los DBMS's lo permiten.

Ahora bien, tu problema en realidad radica en que estás utilizando INNER JOIN, por lo tanto, es necesario que haya registros en TODAS Y CADA UNA DE LAS TABLAS para que se haga la eliminación múltiple.

Una alternativa es que utilices LEFT JOIN's... pero puedes tener algunos problemas debido a que estás utlizando muchas tablas... te sugiero que antes de cualquier prueba respaldes tu información por aquello de las malditas dudas.

Además, tienes un "error" con los JOIN's y es que estás omitiendo la cláusula ON, por lo tanto se está haciendo un producto cartesiano entre tus tablas... en lugar de poner las condiciones de igualdad en el WHERE, ponlas en el ON, que es donde deberían ir. también, en la medida de lo posible EVITA el uso de ALIAS... nada te cuesta poner el nombre completo de tus tablas y eso autodocumenta la consulta.

Entonces tu consulta quedaría más o menos así:

Código MySQL:
Ver original
  1. DELETE proyectos, servicios , pagos , gastos , sueldos
  2. FROM proyectos
  3. LEFT JOIN servicios ON proyectos .id_pro = servicios .id_pro
  4. LEFT JOIN pagos ON proyectos.id_pro = pagos .id_pro
  5. LEFT JOIN gastos ON proyectos.id_pro = gastos .id_pro
  6. LEFT JOIN sueldos ON proyectos.id_pro = sueldos.id_pro
  7. proyectos.id_pro LIKE ". $request['id_pro'];

Finalmente una pregunta, ¿es necesario que hagas una comparación tipo LIKE? es decir, LIKE se utiliza para búsqueda de patrones, utilizando operadores comodín como % o _, si sólo vas a poner valores "fijos" utiliza = en lugar de LIKE:

es decir, en lugar de poner

Código:
proyectos_id_pro LIKE '1'
pon

Código:
proyectos_id_pro = '1'
haz la prueba y nos comentas.

Saludos
Leo.
Hola Leo, gracias por la respuesta.

Bueno, funcionó correctamente y me queda claro el uso del LEFT JOIN, debo reconocer que sé muy poco de mysql.

Ahora, como no me gusta quedarme con la duda, quisiera saber con respecto a porqué no es recomendable usar este tipo de querys. Yo estoy haciendo un programa en javascript y desde el lado del cliente le advierto y re advierto que los datos se eliminaran. Será eso suficiente?

Lo del like era porque en un momento estaba ocupando texto, pero tienes razón, ahora con id_pro=1 es mas eficiente.

gracias nuevamente por la respuesta
__________________
Aquí voy a escribir mi firma