[Bulma] duda de SQL

Hugo Chinchilla hugo en bulma.net
Sab Mar 29 18:26:27 CET 2008


El 29/03/08, Joan Miquel Torres Rigo <joanmiquel en mallorcaweb.net> escribió:
> A Dissabte 29 Març 2008 00:50, Hugo Chinchilla va escriure:
>
> > El 28/03/08, Joan Miquel Torres Rigo <joanmiquel en mallorcaweb.net> escribió:
>
>
> [...]
>
>
>  > >  La sentencia que has pasado (cito):
>  > >  > update wp_term_taxonomy set taxonomy='category' where
>  > >  > taxonomy='post_tag';
>
>
> [...]
>
>
>  > Lo que pasa es que hace un tiempo en un cambio de version de wordpress
>  > algunas de mis categorías  fueron misteriosamente convertidas a tags,
>  > y yo quería devolverles su estado de categorías (cosa que he logrado
>  > al fin).
>  >
>  > Lo que hay en la tabla es más o menos esto:
>  >
>  > id 1 | id 2 |  taxonomy | otros ...
>  >
>  > El error salta por ejemplo si tengo una categoría con id 2=2 y a la
>  > vez un tag con id 2 = 2 al intentar convertirlo a categoría.
>
>
> Bueno, eso ya aclara un poco las cosas...
>
>  Lo que pasa no es que taxonomy sea unique, sino que hay una cláusula unique de
>  taxonomy con, por lo menos, id2.
>
>  En ese caso, para modificar esas filas, tendrás que asignarle otro id nuevo y
>  cuidado que, aunque mysql ya tiene cierta integridad relacional, creo que aún
>  permite usar las antiguas tablas MyISAM que no la tien. Con lo que si haces
>  eso te hará un desastre.
>
>  Si hay integridad relacional puede que no te permita el cambio o puede que te
>  lo haga en cascada (actualizando todas las claves externas afectadas) que
>  seria lo deseable.
>
>  Ojo también con los autonuméricos si hay alguno porque si metes un nuevo id a
>  pelo puede que el mecanismo que utilice la BD para generarlos no se actualice
>  y te den errores los nuevos insert (típicamente hasta que la secuencia llegue
>  de nuevo a un valor no usado). Pero bueno, eso no es grave porque si no te
>  das prisa se soluciona solo :-D
>
>
>  Pero eso es para hacer lo que no pedias (pero que supongo que también te
>  interesará): modificar las líneas que tengan conflicto.
>
>
>  Ignorar un error en una operación atómica, como te dije, es imposible (aparte
>  de erróneo, mal hecho, una salvajada, etc... ;-)). Lo único que puedes hacer
>  es:
>
>  a) Evitar que se produzca el error (mediante la implementación de un trigger
>  adecuado similar al ejemplo que te pasé). Pero eso seria adecuado para algo
>  que deba ser una operativa "normal" para el uso de la B.D.
>
>  b) Dividir la operación en várias operaciones más pequeñas de manera que
>  cuando una de ellas falle sólo se vuelva a tras esa operación y el proceso
>  continue con el resto (es lo más adecuado en tu caso).
>
>  Seria algo así como:
>
>  -8<-------------------------------------------------------
>  for i in $(
>         mysql -u root worpress -BNe "
>                 select 'id1 = ' || id1 || ' and id2 = ' || id2
>                 from wp_term_taxonomy
>                 where taxonomy = 'post_tag';
>         " | xargs
>  ); do
>         mysql -u root wordpress -BNe "
>
>                 update wp_term_taxonomy
>                 set taxonomy = 'category'
>
>                 where ${i};
>         ";
>  done;
>  -8<-------------------------------------------------------
>
>  ...pero cambiando 'root' por el nombre de usuario adecuado para acceder a la
>  BD, 'wordpress' por el nombre que tenga la BD y añadiendo el parámetro con el
>  password si procede.
>
>
>
>  >
>  > Esto es porque he vuelto a crear algunas de las categorías para
>  > algunos posts y el parámetro id2 las relaciona en otra tabla con su
>  > nombre de categoría o tag.
>  >
>  >
>  > Al final he ido ejecutando la orden y añadiendo "and not id='x'" donde
>  > x era el ultimo error que me hubiera dado, al final despues de 5 o 6
>  > intentos lo he conseguido (viva las chapuzas).
>
>
> Es otra forma...
>
>  <para mi>
>  for (
>         i = 0;
>         i < 100000;
>         i++
>  ) {
>         printf ('%s\n', 'Leeré los emails completos antes de empezar a responder.');
>  };
>  </para mi>
>
>
>  >
>  > Lo de consulta es un error de vocabulario mío, quería decir sentencias
>  > pero me ha salido así.
>
>
> Ya me habia dado cuenta... No tiene importancia ;-)
>
>  Rezas 3 veces la GPL y tendrás la absolución :-P
>
>
>
>  > Soy muy muy nooooob en cuanto a bases de datos se refiere pero he
>  > conseguido devolverle a mi blog sus antiguas categorías :-D.
>
>
> ;-)
>
>
>  La próxima vez mejor pasa la estructura de la tabla ('describe <nombre_tabla>'
>  en mysql) y así acabamos antes... Yo tampoco caí en que taxonomy podia ser
>  parte de una clave única y no la clave en si misma.
>
>
>  Un saludo.
>
>
>  --
>
> Joan Miquel Torres__________________________________
>  Linux Registered User #164872
>  http://www.mallorcaweb.net/joanmiquel
>  BULMA: http://bulma.net http://breu.bulma.net/?l2301
>
>  Demana sempre factura amb el cànon detallat quan compris CDs i
>  guarda-la: Si existeix la justícia algun dia els mafiosos ens
>  hauran de tornar el que ens han robat.
>  http://www.todoscontraelcanon.es
>
>  _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
>  AVÍS: NO accept i NO obro ARXIUS ADJUNTS EN FORMATS PROPIETARIS:
>   *  http://www.gnu.org/philosophy/no-word-attachments.es.html *
>  -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
>  _______________________________________________
>  Bulmailing mailing list
>  Bulmailing en bulma.net
>  http://llistes.bulma.net/mailman/listinfo/bulmailing
>  Etiqueta: http://breu.bulma.net/?l676
>

Gracias de nuevo por tu respuesta, por lo que veo las bases de datos
pueden llegar a ser algo muy complejo, tengo ganas de dar la
asignatura de bases de datos el año que viene :-D, pero me parece que
se ve mas Oracle que cualquier otra :-(

Saludosssss

-- 
Hugo Chinchilla Carbonell

Good programmers often confuse halloween (31 OCT) with christmas (25 DEC)


Más información sobre la lista de distribución Bulmailing