[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