[Bulma] duda de SQL
Hugo Chinchilla
hugo en bulma.net
Sab Mar 29 00:50:40 CET 2008
El 28/03/08, Joan Miquel Torres Rigo <joanmiquel en mallorcaweb.net> escribió:
> A Divendres 28 Març 2008 18:17, Hugo Chinchilla va escriure:
>
> > Hola de nuevo, tengo un problema con una sentencia SQL, estoy
> > intentando cambiar en una tabla todo lo que tenga el valor 'post_tag'
> > por 'category', cuando ejecuto la consulta " update wp_term_taxonomy
> > set taxonomy='category' where taxonomy='post_tag'; " me da un error y
> > se para.
> > Lo que quiero es que ignore el error y continué con la ejecución,
> > ¿existe algún parámetro para eso?
>
>
> Ninguna base de datos que pueda llamarse como tal te permitirá hacer eso.
>
> Un update es una OPERACIÓN ATÓMICA. Por lo tanto, no puede hacerse "a medias".
> O se completa o la BD vuelve al estado inicial.
>
>
> Lo que sí puedes hacer es "modificar el comportamiento del update" mediante un
> trigger sobre la tabla afectada (la última vez que usé mysql aún no habia
> triggers, pero creo que ha llovido mucho desde entonces) para evitar que
> llegue a producirse el error.
>
> En postgres seria algo así:
>
> -8<---------------------------
>
> create or replace function JumpDuplicated()
> Returns trigger
> AS '
> DECLARE
>
> BEGIN
>
> if (
> -- Valor duplicado
> (
> select count(*)
> from wp_term_taxonomy
> where taxonomy = NEW.taxonomy
> ) > 0
> ) then
> -- Generamos un "notice"
> -- (Feedback, pero no warning ni error)
> -- (Opcional, pero de buen gusto)
> RAISE NOTICE ''Ignorando valor duplicado: %'', NEW.taxonomy;
>
> -- Hacemos que la fila se quede como estaba:
> RETURN OLD;
> else
> -- Permitimos que se actualice la fila:
> RETURN NEW;
> end if;
>
> END;
> ' LANGUAGE plpgsql;
>
> create trigger UpdateJumpDuplicaded before UPDATE
> on wp_term_taxonomy for each row
> execute procedure JumpDuplicated();
> -8<---------------------------
>
>
> >
> > El error que me da es este:
> >
> > ERROR 1062 (23000): Duplicate entry '6-category' for key 2
>
>
> De todos modos aquí hay algo que no cuadra...
>
> La sentencia que has pasado (cito):
>
>
> > update wp_term_taxonomy set taxonomy='category' where taxonomy='post_tag';
>
>
> Cambia el valor de la columna taxonomy por 'category' donde anteriormente
> valga 'post_tag' y por el error que te da, se entiende que la columna
> taxonomy és unique, por lo que sólo puede existir una fila en que que
> taxonomy valga 'category' (o cualquier otro valor concreto).
>
> Y por otro lado, si te está dando error por duplicidad de clave, significa que
> ya existe OTRA fila en que taxonomy vale 'category'. Por lo tanto ésta fila
> no puede actualizarse a ese valor (hasta aquí Ok)
>
> Pero, POR LA MISMA RAZÓN, si en la fila que te ha fallado taxonomy
> valia 'post_tag' (si no no hubiera intentado modificarla), NO PUEDE EXISTIR
> NINGUNA OTRA FILA en que taxonomy tenga ese mismo valor.
>
>
> En otras palabras: ¿Qué demonios quieres hacer? Porque en el ejemplo que has
> puesto, aún cuando evitaras que se ejecutara el error, conseguirias que se
> completara la ejecución del update, si. Pero la única diferencia seria que
> perderias más tiempo en hacer nada. (y si lo que quieres es implementar una
> espera hay mejores formas de hacerlo... :-P)
>
>
>
> >
> > Lo que quiero que haga con estas filas es que las deje tal cual, pero
> > no se como saltármelas en la consulta.
>
>
> ???
>
> A qué llamas "consulta"? La sentencia que has pasado es un update. No devuelve
> nada y, como te he explicado más arriba, en éste caso NO HACE NADA.
>
> ¿Para qué quieres que continue?
>
> Saludos.
>
> --
> 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
>
Bueno, a ver por donde empiezo xD que hay mucho a lo que responder.
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.
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).
Lo de consulta es un error de vocabulario mío, quería decir sentencias
pero me ha salido así.
Soy muy muy nooooob en cuanto a bases de datos se refiere pero he
conseguido devolverle a mi blog sus antiguas categorías :-D.
--
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