Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/01/2013, 11:14
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta en dos tablas ??

Código:
EDITO: jejejeje me entretuve tanto en el mensaje que el compañero gnzsoloyo se me adelantó... Saludos!!!
Hola asdmaster:



Antes que nada, no es correcto que mezcles código de programación con código SQL... está prohibido por políticas del foro y corres el riesgo de que los administradores lo modifiquen y no se entienda el problema... cuando publiques en este foro enfócate sólo en el SQL... si tienes un problema con PHP o con cualquier otro lenguaje de programación, entonces publica tu pregunta en los foros respectivos.

Ahora si, vayamos al tema de tu problema... no nos dices en realidad cómo es la actualización que quieres realizar, ni tampoco nos dices cuál es la relación que hay entre tus tablas... Tampoco nos dices si la consulta que estás colocando te marca un error (y si fuera el caso no nos dices qué error es el que te marca). Si la consulta no marca error, pero no obtienes los resultados esperados, entonces también deberías comentar más al respecto. Mucho ojo para la siguiente... recuerda que no somos adivinos, entre más detalles puedas dar del problema, más fácil será que podamos dar con una solución...

Ahora bien... tratando de jugar al adivino, creo que el problema está en las relaciones entre tus tablas... te pongo un ejemplo para ver si este es el problema. Supongamos que tenemos estas tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +------+-------+
  3. | id   | campo |
  4. +------+-------+
  5. |    1 | uno   |
  6. |    2 | dos   |
  7. |    3 | tres  |
  8. +------+-------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +------+-------+
  13. | id   | campo |
  14. +------+-------+
  15. |    1 | one   |
  16. |    2 | two   |
  17. |    4 | four  |
  18. +------+-------+
  19. 3 rows in set (0.00 sec)

Observa que en ambas tablas aparece el id=1... supongamos que entonces tú quieres modificar este campo en ambas tablas... para hacerlo deberás hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> UPDATE tabla1, tabla2 SET
  2.     -> tabla1.campo = CONCAT(tabla1.campo, ' modificado'),
  3.     -> tabla2.campo = CONCAT(tabla2.campo, ' modificado')
  4.     -> WHERE
  5.     ->   tabla1.id = tabla2.id AND
  6.     ->   tabla1.id = 1;
  7. Query OK, 2 rows affected (0.05 sec)
  8. Rows matched: 2  Changed: 2  Warnings: 0
  9.  
  10. mysql> SELECT * FROM tabla1;
  11. +------+----------------+
  12. | id   | campo          |
  13. +------+----------------+
  14. |    1 | uno modificado |
  15. |    2 | dos            |
  16. |    3 | tres           |
  17. +------+----------------+
  18. 3 rows in set (0.00 sec)
  19.  
  20. mysql> SELECT * FROM tabla2;
  21. +------+----------------+
  22. | id   | campo          |
  23. +------+----------------+
  24. |    1 | one modificado |
  25. |    2 | two            |
  26. |    4 | four           |
  27. +------+----------------+
  28. 3 rows in set (0.00 sec)

Hasta aquí todo está bien... entonces, dónde puede estar el problema? hay que tener mucho cuidado con las condiciones que estás poniendo... observa que yo pongo dos... una para especificar las relaciones entre las tablas (tabla1.id = tabla2.id) y la otra para filtrar el id que quiero modificar (tabla1.id = 1).

Un error típico que suele ocurrir cuando tratas de modificar más de una tabla en un UPDATE es justamente no poner las condiciones que relacionan las tablas... observa este ejemplo... voy a modificar el id=2 de la manera en que lo estás haciendo:

Código MySQL:
Ver original
  1. mysql> UPDATE tabla1, tabla2 SET
  2.     -> tabla1.campo = CONCAT(tabla1.campo, ' modificado'),
  3.     -> tabla2.campo = CONCAT(tabla2.campo, ' modificado')
  4.     -> WHERE tabla1.id = 2 OR tabla2.id = 2;
  5. Query OK, 6 rows affected (0.11 sec)
  6. Rows matched: 6  Changed: 6  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla1;
  9. +------+---------------------------+
  10. | id   | campo                     |
  11. +------+---------------------------+
  12. |    1 | uno modificado modificado |
  13. |    2 | dos modificado            |
  14. |    3 | tres modificado           |
  15. +------+---------------------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> SELECT * FROM tabla2;
  19. +------+---------------------------+
  20. | id   | campo                     |
  21. +------+---------------------------+
  22. |    1 | one modificado modificado |
  23. |    2 | two modificado            |
  24. |    4 | four modificado           |
  25. +------+---------------------------+
  26. 3 rows in set (0.00 sec)

¿Qué fue lo que pasó, si sólo especificaste que el id fuera dos... entonces por qué diablos modificó todos los registros?

La respuesta está en el concepto de PRODUCTO CARTESIANO, que supongo debes saber de que se trata... observa estos SELECT's:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1, tabla2
  2.     -> WHERE
  3.     ->   tabla1.id = tabla2.id AND
  4.     ->   tabla1.id = 2;
  5. +------+----------------+------+----------------+
  6. | id   | campo          | id   | campo          |
  7. +------+----------------+------+----------------+
  8. |    2 | dos modificado |    2 | two modificado |
  9. +------+----------------+------+----------------+
  10. 1 row in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla1, tabla2
  13.     -> WHERE
  14.     ->   tabla1.id = 2 OR tabla2.id = 2;
  15. +------+---------------------------+------+---------------------------+
  16. | id   | campo                     | id   | campo                     |
  17. +------+---------------------------+------+---------------------------+
  18. |    2 | dos modificado            |    1 | one modificado modificado |
  19. |    1 | uno modificado modificado |    2 | two modificado            |
  20. |    2 | dos modificado            |    2 | two modificado            |
  21. |    3 | tres modificado           |    2 | two modificado            |
  22. |    2 | dos modificado            |    4 | four modificado           |
  23. +------+---------------------------+------+---------------------------+
  24. 5 rows in set (0.00 sec)

Observa en el segundo caso, se está realizando un PRODUCTO CARTESIANO entre las tablas... es por eso que se modifican todos los registros...

Espero que esto te ayude a resolver tu problema, pero si continuas con algún detalle lo comentas en el foro.

Saludos
Leo.