mis à jour d'un champ de table

Eléphant du PHP | 89 Messages

17 mai 2007, 18:13

bonjour à tous

je posséde deux tables dans une base de données structurées comme suit:
  • T_1
    id_champ_t_1 (clé primaire)
    champ2 (mis à jour par le par le id_champ_t_2 de la table 2)
    champ3
    champ4

    T_2
    id_champ_t_2 (clé primaire)
    champ2
    champ3
avec la commande SQL suivante je met à jour ma table 1 (T_1)

Code : Tout sélectionner

UPDATE T_1 ,T_2 SET champ2=id_champ_t_2 where t_1.champ3=t_2.champ4
cela fonctionne trés bien et les informations de tables se lient comme il faut quand les contenus des champs sont parfaitement identiques. En revanche exist-il une possibilité de mettre à jour le champ2 de la table 1 quand seulement les derniers caractéres sont identiques
exemple:t_1champ3=ABCD1234
t_2champ4=1234
J'ai bien essayé le code suivant

Code : Tout sélectionner

UPDATE T_1 ,T_2 SET champ2=id_champ_t_1 WHERE t_1.champ3 LIKE t_2.%champ4
mais cela ne fonctionne pas!

ViPHP
ViPHP | 5924 Messages

18 mai 2007, 01:00

Vois avec la fonction INSTR

Eléphant du PHP | 89 Messages

19 mai 2007, 17:05

J'ai trouvé la solution!

Code : Tout sélectionner

UPDATE T_1 ,T_2 SET champ2=id_champ_t_1 WHERE RIGHT (t_1.champ3, 4) = RIGHT( t_2.%champ4, 4)
Mysql met à jour les champs quand les quatres derniers caractéres sont identiques!

A bientôt

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

19 mai 2007, 18:00

Je ne vais pas m'étendre sur le sujet car il a été abordé maintes fois, mais j'espère que tu es conscient que ton approche force MySQL à lire l'intégralité des deux tables et les vérouille en lecture et en écriture pendant toute l'opération. Donc j'espère que ce n'est pas une requête que tu exécutes souvent ou sur de grandes tables...

Eléphant du PHP | 89 Messages

21 mai 2007, 13:53

Si tu as une autre solution, je suis preneur!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

21 mai 2007, 14:17

Comme je le disais dans ton précédent sujet, crée une colonne qui sera identique dans les deux tables. C'est comme ça que les jointures doivent se faire, pas avec des trucs plus-ou-moins-équivalents-et-si-on-force-un-peu-ça-rentre.