IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

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


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Besoin d'aide pour un UPDATE un peu spécial
    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...

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    La question qui vient immédiatement à l'esprit c'est pourquoi ces redondances dans la table ?
    La base résulte d'une analyse déficiente, d'où ces problèmes aberrants d'UPDATE.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Il n'y a pas de problème d'UPDATE, je DOIS faire un UPDATE pour que ma base soit complète, pour remplir les champs vides dans "film".

    Redondance, non c'est une table qui possède 15 champs, et les champs film et film2 peuvent tout a fait être présents dans plusieurs enregistrements...

    Mon but est tout simplement que pour chaque enregistrement, de la table, on trouve le champ film et film2 remplis.

    En résumé ma requête est trouver 1 enregistrement où il y a les deux champs remplis, film et film2, et remplir les enregistrements dans film qui ont la même chaîne dans film2, mais avec celle de film.

    Sans faire une copie de la table puis une requête avec jointure je n'y arrive pas...

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 030
    Points : 23 756
    Points
    23 756
    Par défaut
    Citation Envoyé par Julien__ Voir le message
    Redondance, non c'est une table qui possède 15 champs, et les champs film et film2 peuvent tout a fait être présents dans plusieurs enregistrements...
    Justement, le fait que les mêmes film et film2 soient présents dans plusieurs enregistrements, c'est de la redondance, et donc une erreur de modélisation.

    Et du coup, on en arrive à des problèmes comme celui que tu rencontres .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 030
    Points : 23 756
    Points
    23 756
    Par défaut
    Bon, je te propose une mise à jour en 2 temps :
    1. Création d'une table temporaire contenant les différents couples (film, film2) complets ;
    2. Mise à jour des films incomplets grâce à la table temporaire.


    Ca donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create temporary table t3 as
    select distinct film, film2
    from table3
    where film is not null
    pour créer la table temporaire.

    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    update table3
    inner join t3 on table3.film2 = t3.film2
    set table3.film = t3.film
    where table3.film is null;
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Finalement, j'ai fait comme ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table3 A, table3 B 
    SET A.film=B.film 
    WHERE B.film NOT LIKE '' 
    AND A.film2=B.film2;
    Une personne m'a dit de faire comme ça, j'y croyais pas du tout, et pourtant ça marche, et je trouve ça même puissant et amusant...

    Merci quand même pour ton aide...

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 030
    Points : 23 756
    Points
    23 756
    Par défaut
    Là, tu mets toutes les lignes à jour, à moins que le fait que la colonne FILM soit à (vide) corresponde à une chaîne vide ('') et pas à des NULL dans la base .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour requête update
    Par RedDrMaboul dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/04/2013, 16h17
  2. SQL Server + C#, besoin d'aide pour update "non simple" avec bindingsource
    Par robertopowa dans le forum Accès aux données
    Réponses: 1
    Dernier message: 30/04/2010, 10h00
  3. Besoin d'aide pour requête update imbriqué
    Par nabilo_22 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/03/2009, 23h05
  4. Update & Delete : besoin d'aide pour finir
    Par Romuald632 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/02/2009, 16h07
  5. [URL Rewriting] Besoin d'aide pour règle un peu longue
    Par yvon_huynh dans le forum Apache
    Réponses: 5
    Dernier message: 23/06/2008, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo