Besoin d'aide pour un UPDATE un peu spécial

WRInaute occasionnel
Bonjour,

je n'arrive pas à faire un UPDATE sur une table, si quelqu'un a une solution...

Table : table3
champs concernés : film et film2

C'est une table qui contient plusieurs champs, dont un "film" avec le titre en français, et l'autre "film2" avec le titre en anglais.

il y a environ 10000 enregistrements

le champ film2 avec les titres en anglais est complet nikel

certains enregistrements du champ film sont vides

Tous les enregistrements ont au moins une fois dans la table le champ film et film2 rempli correctement.

Je voudrais faire un UPDATE pour que tous les enregistrements avec un champ film vide soit mis à jour:

id | film | film2 | info
---------------------
1 | L'Homme au masque de fer | The Man in the Iron Mask | info1
2 | L'Homme au masque de fer | The Man in the Iron Mask | info2
3 | (vide) | The Man in the Iron Mask | info3
4 | L'Homme au masque de fer | The Man in the Iron Mask | info4
5 | (vide) | The Man in the Iron Mask | info5

Comment faire pour que les enregistrements avec le champ film vide se remplissent correctement en fonction du champ film2, mais avec la chaine dans film?

Merci pour votre aide...
 
WRInaute accro
Voyons voir...

D'abord un SELECT film, film2, histoire de bien commencer:

SELECT A.film, A.film2 FROM table3 A WHERE A.film2 NOT LIKE '';

Voyons voir l'UPDATE:

UPDATE table3 A, table3 B SET A.film=B.film WHERE B.film NOT LIKE '' AND B.film2=A.film2;

table3 est le nom de la table.

Je crois avoir moi-même rencontré ce type de requêtes d'update en fonction de valeurs existantes dans la table. Je l'ai résolue de cette manière.

Il me semble que pour MySQL 5 ça marche, pas sûr.

Faut tester sur une table copie, sinon tu risque de perdre la table.

Bien à vous.

Amicalement.

Jean-François Ortolo
 
WRInaute accro
Bonsoir

Dans l'instruction UPDATE que j'ai indiquée, il n'y a qu'une table, qui est table3.

Je sais, c'est trompeur, mais il faut indiquer la table deux fois, pour pouvoir gérer deux champs différents chacun en fonction de l'autre champ.

Fais une copie de ta table, en créant une table équivalente à la table table3:

CREATE TABLE , etc...

Ceci uniquement pour pouvoir tester l'update, histoire de ne pas perdre les données. Théoriquement ce n'est pas nécéssaire, mais c'est plus prudent.

Ensuite, tu as le nouveau nom de table qui est par exemple: table4, tu fais un remplissage dans cette table table 4 à partir de la table table3:

INSERT INTO table4(champ1, champ2, etc... ) SELECT * from table3;

Ensuite:

COMMIT;

Pour faire en sorte que les données soient bien enregistrées ( Ce n'est pas nécessaire car MySQL n'est pas un SGBD transactionnel il me semble, je peux me tromper ).

Ensuite, tu lance mon ordre update, avec ce même nom de table table4:

UPDATE table4 A, table4 B SET A.film=B.film WHERE B.film NOT LIKE '' AND A.film2=B.film2;

C'est la même table table4 pour A et B.

Et puis:

COMMIT;

Ensuite, tu regarde tes données dans table4:

SELECT * FROM table4 ORDER BY film2;

Le seul problème qui risque de survenir, c'est si tu as mis un index unique dans le champ film.

Normalement ce n'est pas le cas.

Cependant, l'ordre SQL d'update sera plus rapide à s'exécuter, si tu as un index ( multiple ) sur chaque champs film et film2.

J'ai testé ce type d'ordre update sur mon MySQL, qui est à la version 5.

C'est la moindre des choses de mettre à jour ses outils informatique. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo
 
WRInaute occasionnel
Comme tu as pu le voir, j'y croyais pas du tout, mais là je te dois 2 X Merci

1. Rapidité de la réponse
2. Clarté des explications

Merci Merci

ça marche impeccable...
 
Discussions similaires
Haut