[Bulma] duda de SQL
Joan Miquel Torres Rigo
joanmiquel en mallorcaweb.net
Sab Mar 29 18:06:52 CET 2008
A Dissabte 29 Març 2008 00:50, Hugo Chinchilla va escriure:
> El 28/03/08, Joan Miquel Torres Rigo <joanmiquelamallorcaweb.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 *
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Más información sobre la lista de distribución Bulmailing