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 :

Problème de jointure et condition


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 39
    Par défaut Problème de jointure et condition
    Bonjour,

    Enoncé :
    j'ai des annonces qui sont posté par des utilisateurs (account). ces même utilisateurs ont plusieurs commerce ou pas du tout. Chaque utilisateur et chaque commerce sont associé à une Référence Province.

    J'aimerais juste récupéré l'id de l'annonce (table annonce) avec la province de l'utilisateur (table account) ou avec la province du commerce si elle est spécifié dans l'annonce (à la place de la province de l'utilisateur).

    Pour le moment, c'est chaque fois la province de l’utilisateur qui est renvoyé et je ne parviens pas à récupéré la province du commerce quand sa référence n'est pas NULL dans l'annonce. Je pense que mom problème est dans ma jointure entre account et region mais comment faire une jointure sous condition concernant la Ref_Commerce à NULL ???

    Est ce que quelqu'un aurait une idée, parceque je nage ? Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT annonce.Ref, province.Ref, province.nom
    FROM annonce
     
    LEFT JOIN account AS `AccountR` ON ( `Annonce`.`Ref_Account` = `AccountR`.`Ref` )
    LEFT JOIN region AS `Region` ON ( `AccountR`.`Ref_Commune` = `Region`.`Ref` )
    LEFT JOIN province AS `Province` ON ( `Region`.`Ref_Province` = `Province`.`Ref` )
    LEFT JOIN `commerce` AS `Commerce` ON ( `Annonce`.`Ref_Commerce` = `Commerce`.`Ref` )
     
    AND ( 
    (annonce.Ref_Commerce IS NOT NULL AND commerce.Actif =1) 
        OR annonce.Ref_Commerce IS NULL)

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il faut une deuxième instance de la table province. En supposant qu'il y a une association directe entre commerce et province, essaie comme ça :
    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
    20
    21
    22
    23
    SELECT annonce.Ref, 
    	CASE 
    		WHEN p2.Ref IS NOT NULL THEN p2.Ref
    		ELSE p.Ref
    	END AS Ref_Province, 
    	CASE 
    		WHEN p2.Ref IS NOT NULL THEN p2.nom
    		ELSE p.nom 
    	END AS nom_province
    FROM annonce a
    LEFT JOIN account ac ON ac.Ref_Account = ac.Ref
    	LEFT JOIN region r ON ac.Ref_Commune = r.Ref
    		LEFT JOIN province p ON r.Ref_Province = p.Ref
    LEFT JOIN commerce c ON a.Ref_Commerce = c.Ref
    	LEFT JOIN province p2 ON c.Ref_Province = p2.Ref
    	AND 
    	( 
    		(
    			annonce.Ref_Commerce IS NOT NULL 
    			AND commerce.Actif = 1
    		) 
    		OR annonce.Ref_Commerce IS NULL
    	)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 39
    Par défaut
    Super Génial, un tout grand merci mais encore une petite question.

    Avec cette manière de procéder, si vous permettez je vais pousser le raisonnement encore un peu plus loin.

    Si maintenant à la place de renvoyer une liste je veut renvoyer le nombre d'annonce par province en une seul requête, est ce possible ?

    merci d'avance,

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT p.Ref AS Ref_Province, 
    	p.Nom AS Nom_Province,
    	COUNT(a.*) AS nb_annonces_account_region,
    	COUNT(a2.*) AS nb_annonces_commerce
    FROM province p
    LEFT OUTER JOIN region r ON r.Ref_Province = p.Ref
    	LEFT OUTER JOIN account ac ON ac.Ref_Commune = r.Ref
    		LEFT OUTER JOIN annonce a ON a.Ref_Account = ac.Ref
    LEFT OUTER JOIN commerce c ON c.Ref_Province = p.Ref
    	LEFT OUTER JOIN annonce a2 ON a2.Ref_Commerce = c.Ref
    GROUP BY p.Ref, p.Nom
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 39
    Par défaut
    vraiment un tout grand merci.

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

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 17h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 15h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 16h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 22h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 12h27

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