[RESOLU][SQL] Aide pour une requete update

Bonjour à tous,

Je n’ai plus eu l’occasion de faire de requètes SQL depuis 3 ans, et j’ai complétement oublié la syntaxe, et je me permet donc de faire appel à vous pour éviter de passer des heures à chercher…

[My life] Depuis 2005, mon petit blog rend compte de mon projet de construction. Déjà 190 posts, et Dotclear montre ses limites, notament en matière de gestion de pages statiques. Bref, comme d’autres avant moi, je passe à Wordpress. J’ai utilisé, comme CED, le plugin Flat Import, qui marche bien. Le problème est que l’id de chaque post est modifié lors de l’import. Exit donc les permaliens, et ça c’est mal. Impossible de faire de la redirection permanente : je suis chez free, et l’hébergeur n’aime pas les htaccess.

J’ai donc réussi à faire en sorte que l’ordre des posts soit conservé, même si la numérotation est décalée. En clair, mes posts ID 2,3,4,… ont désormais l’ID 10194, 10195, 10196,…[/My life]

Je souhaite redonner la bonne id à tout cela… Quelle bonne idée, n’est-ce pas !

  1. Les posts eux-même

Dans la table intitulée wp_posts j’aimerais faire ceci :

Balayer la table : pour chaque enregistrement dont le champ ID est > 10194, remplacer la valeur de ce champ par “sa valeur moins 10192” (de manière que #10194 redevienne #2, etc)

  1. La relation post/catégorie

Dans la table intitulée wp_post2cat j’aimerais faire ceci :

Balayer la table, et Pour chaque enregistrement dont le champ post_ID > 10194, faire la même chose.

  1. Les commentaires

Dans la table intitulée wp_comments j’aimerais faire ceci :

Balayer la table, et Pour chaque enregistrement dont le champ comment_post_ID > 10194, faire la même chose.

Et voilà. Je sais que quelques petites requètes pas bien compliquées pourront faire cela. Je n’ai malheureusement vraiment pas le temps de me repencher sur la syntaxe. Connaissant votre compétence et votre gentillesse habituelle, je vous sollicite donc.

D’avance merci.

UPDATE table
SET id = ancienne_valeur - constante
WHERE ancienne_valeur > constante

Maintenant, pour etre plus sur que ca marche, je créerais un nouveau champ, et je ferais
UPDATE table
SET nouveau_champ = ancienne_valeur - constante
WHERE ancienne_valeur > constante

Si tu a une contrainte quelconque sur le champ id par contre, va falloir soit que tu l’enleve le temps de la manip et que tu la remette apres, soit que tu supprime le champ id et que tu le recrée après. Mais il est possible/probable, selon la facon dont le champ à été crée, que tu ne puisse pas le modifier directement.

Si simple ? Pas de “Do… while” ou de loop quelconque ? pas de “getFieldValue” pour obtenir la valeur du champ ? Eeeh ben, j’avais oublié à quel point c’est chouette, SQL…

Donc il suffit que je tape le nom du champ sans guillemets pour faire référence à sa valeur ? Cool…

En pratique, pour updater ma table wp_posts, je n’aurais donc qu’à faire

UPDATE wp_posts SET wp_posts.id = wp_posts.id - 10192 WHERE wp_posts.id > 10193

… et toutes mes ID qui répondent au critère de la ligne 3 seront adapté selon la ligne 2.

Vous me confirmez que c’est ça (en temps normal, je testerais, quitte à tout casser - j’ai des backups - mais là, j’ai pas envie de perdre du temps).

Edit ortho

oui c’est ca. Et si ta base à bien été définie avec des ON UPDATE CASCADE, ben, t’auras même pas besoin de changer dans les autres tables.

Effectivement, ça marche. J’ai fait le test sur une copie de table, et tout roule. Cool.

Merci beaucoup. Vrainment.