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 :

MYSQL: UPDATE restreindre sa portée


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut MYSQL: UPDATE restreindre sa portée
    J'ai les tables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    TABLE CONTRIBUTEURS
    id_contributeur; nom_contributeur; prenom_contributeur;photo_contrib
    1; MARTINO; Jean; martino-jean.jpg
    2; JUBERT; Bob; jubert-bob.jpg
    3; DOUPARD; Jacques; doupard-jacques.jpg
     
    TABLE FONCTIONS
    id_fonction; nom_fonction
    1; Auteur
    2; Traducteur
    3; Illustrateur
     
    TABLE PARTICIPE
    id_contributeur;id_fonction
    1;1
    2;2
    3;1
    3;2
    Je fais la requête UPDATE suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE CONTRIBUTEURS CB
     
    INNER JOIN PARTICIPE P 
     
    ON  CB.ID_CONTRIBUTEUR = P.ID_CONTRIBUTEUR
     
    INNER JOIN FONCTION F
    ON F.ID_FONCTION = P.ID_FONCTION
     
    SET CB.PHOTO_CONTRIB = NULL
     
    WHERE F.ID_FONCTION != 1 AND CB.PHOTO_CONTRIB IS NOT NULL
    Après cette requête, la TABLE CONTRIBUTEURS contient donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_contributeur; nom_contributeur; prenom_contributeur;photo_contrib
    1; MARTINO;Jean;martino-jean.jpg
    2; JUBERT; Bob;NULL
    3; DOUPARD;Jacques;NULL
    Je voudrais restreindre la portée du WHERE : NE PAS UPDATER si le contributeur exerce AU MOIS 2 FONCTIONS DONT L'UNE EST CELLE D'AUTEUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_contributeur; nom_contributeur; prenom_contributeur;photo_contrib
    1; MARTINO; martino-jean.jpg (1 seule fonction exercée : auteur => update NON réalisé)
    2; JUBERT; NULL (1 seule fonction exercée : traducteur => update réalisé)
    3; DOUPARD; Jacques;doupard-jacques.jpg (2 fonctions exercées dont celle d'auteur => update NON réalisé)
    DOUPARD Jacques ne serait pas concerné par l'UPDATE car il exerce à la fois les fonctions de traducteur et d'auteur.
    Voyez-vous comment procéder pour arriver à l'effet escompté ? Merci.

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    <> pour différent pas !=

    ça ne marcherait pas ça?...:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    UPDATE CONTRIBUTEURS CB
     
    INNER JOIN PARTICIPE P 
      ON  CB.ID_CONTRIBUTEUR = P.ID_CONTRIBUTEUR
     
    INNER JOIN (select count(e.id) as c,e.id as id
      from FONCTION e
      where e.ID_FONCTION = 1 AND e.ID_FONCTION = P.ID_FONCTION) g
        on g.c>0 and g.id=p.ID_FONCTION
     
    INNER JOIN (select count(f.id) as c,f.id as id
      from FONCTION F
      where F.ID_FONCTION<>1 AND F.ID_FONCTION = P.ID_FONCTION) h
        on h.c>0 and h.id=p.ID_FONCTION
     
    SET CB.PHOTO_CONTRIB = NULL
     
    WHERE CB.PHOTO_CONTRIB IS NOT NULL
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci pour ta réponse. Je vais faire des tests et re-posterai si nécessaire.

Discussions similaires

  1. MySQL - Update et insert Multiple
    Par mastronic dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2006, 09h28
  2. Mysql update supprime un enregistrement
    Par Langly dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/08/2006, 17h46
  3. [MySQL] updater un seul tuple a la fois+increment de la cle
    Par kenny49 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/07/2006, 12h13
  4. [MySQL] update a partir du resultat d'un select
    Par brice01 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 05/04/2006, 22h44
  5. prob. d' incrémentation /mysql UPDATE
    Par K4trix dans le forum Requêtes
    Réponses: 15
    Dernier message: 01/12/2005, 17h27

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