Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/08/2013, 11:37
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: Actualizar datos de un campo con datos de varios campos

Hola de nuevo aprendiz69:

Vayamos por partes... Si lo que pretendes hacer es tener un campo MULTIVALUADO, es decir, que en el campo wp_posts.post_category tengas asociadas todas las categorías definidas en tu tabla wp_term_relationships, OLVIDALO, en un modelo E-R NO DEBEN EXISTIR CAMPOS MULTIVARIADOS. Estos sólo te darán dolores de cabeza... ni lo pienses.

No sé exactamente qué es lo que quieres hacer... igual es conveniente que comiences por decirnos exactamente cuál es la estructura de tus tablas y que nos pongas algunos datos de ejemplo. Una vez que hagas esto, entonces nos expliques qué es lo que necesitas actualizar... es decir, cómo deberían quedar tus datos después de hacer el UPDATE... de esta manera será más fácil tratar de ayudarte a encontrar una alternativa que se ajuste a lo que necesitas.

Cita:
El problema es que esto sólo me sirve en los casos en que una entrada del sitio WP sólo tiene marcada una categoría. Cuando una entrada tiene marcadas dos o más categorías, este comando sólo actualiza el valor de la primera que encuentra.
Efectivamente, si tu relación entre tus tablas es 1 a N, el update actualizará sólo la primer ocurrencia, checa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +------+-----------+
  3. | id   | categoria |
  4. +------+-----------+
  5. |    1 | NULL      |
  6. |    2 | NULL      |
  7. |    3 | NULL      |
  8. +------+-----------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +------+---------------+
  13. | id   | categoria     |
  14. +------+---------------+
  15. |    1 | categoria 1.1 |
  16. |    1 | categoria 1.2 |
  17. |    2 | categoria 2.1 |
  18. +------+---------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> UPDATE tabla1, tabla2 SET tabla1.categoria = tabla2.categoria
  22.     -> WHERE tabla1.id = tabla2.id;
  23. Query OK, 2 rows affected (0.04 sec)
  24. Rows matched: 2  Changed: 2  Warnings: 0
  25.  
  26. mysql> SELECT * FROM tabla1;
  27. +------+---------------+
  28. | id   | categoria     |
  29. +------+---------------+
  30. |    1 | categoria 1.1 |
  31. |    2 | categoria 2.1 |
  32. |    3 | NULL          |
  33. +------+---------------+
  34. 3 rows in set (0.00 sec)

Observa que aunque el ID = 1 TIENE ASOCIADAS DOS CATEGORÍAS (1.1 y 1.2), el resultado del UPDATE asigna sólo el primero.

Si lo que pretendes hacer es obtener algo como eso;

Código:
mysql> SELECT * FROM tabla1;
+------+-----------------------------+
| id   | categoria                   |
+------+-----------------------------+
|    1 | categoria 1.1,categoria 1.2 |
|    2 | categoria 2.1               |
|    3 | NULL                        |
+------+-----------------------------+
3 rows in set (0.00 sec)
Esto es un campo multivaluado y NO DEBEN HACERLO, no deben existir estos valores, no tienen ninguna ventaja... Podrías hacerlo (podría incluso poner el código SQL para hacerlo) pero insisto que no debe ser.

Si insistes en hacer algo como esto y te es imposible cambiar tu modelo, checa la función GROUP_CONCAT... pero por favor, sólo hazlo si en verdad no tienes otra opción.

Saludos
Leo.