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

Langage SQL Discussion :

Récupérer commercial associé à une société


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut Récupérer commercial associé à une société
    Bonjour à tous !

    Je sollicite une nouvelle fois votre aide dans le but de simplifier une requête que j'ai écris et que je suis obligé de "post-traiter". Le but étant maintenant de faire réaliser par le SGBDR ce que je faisais à la main par la suite.

    Je développe un petit CRM et je dispose d'une liste de sociétés et d'une liste d'utilisateurs.



    Chaque utilisateur peut avoir à gérer un certain nombre de sociétés. Pour qu'un utilisateur donné puisse gérer une société celà peut se faire de deux manières :
    - Soit de façon manuelle en sélectionnant la société et en lui attribuant un commercial (peut être fastidieux avec 10 000 sociétés)
    - Soit de façon plus automatique en utilisant la notion de secteur. Je m'explique :

    Chaque utilisateur se voit attribuer des "Secteurs", ces secteurs sont en fait des collections de code postaux (ex: Le secteur 1 couvre les codes postaux : 14000, 50000 et 61000), toutes les sociétés situées dans les villes touchées par ces codes postaux sont donc dans le secteur 1 et par conséquent sont gérées par l'utilisateur.

    J'ai deux chemins possibles pour lier ma table "societe" à ma table "user" :
    Si l'utilisateur a été spécifié manuellement j'ai directement une clé étrangère "id_user" dans la table societe.
    Si l'utilisateur n'a pas été spécifié manuellement la colonne "id_user" est nulle et je passer par les tables suivantes (dans l'ordre) :
    -> Ville -> Code Postal -> Secteur -> User

    Voici la requête type que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
    	soc.nom as soc_nom,
    	user_secteur.nom,
    	user_secteur.prenom,
    	user_attribue.id,
    	user_attribue.nom,
    	user_attribue.prenom	
    FROM societe soc
    INNER JOIN ville v ON s.id_ville = v.id   
    INNER JOIN codepostal cp ON v.cp = cp.code   
    INNER JOIN secteur sect ON cp.id_secteur = sect.id   
    INNER JOIN user user_secteur ON sect.id_user = user_secteur.id   
    LEFT OUTER JOIN user user_attribue ON s.id_user = user_attribue.id;
    Ensuite côté applicatif quand je récupère les données je fais quelque chose du genre :
    Si user_attribue.id IS NULL Alors
    commercial = commercial secteur
    SINON
    commercial = commercial attribue

    La durée de traitement est pas vilaine mais j'aimerais éviter d'avoir à le faire surtout que le SGBDR doit savoir le faire bien plus vite que moi.

    Est-il possible d'utiliser une requête qui renvoie directement le bon commercial ?

    J'ai regardé un peu du côté de l'instruction CASE mais je peine à l'appliquer à ma requête d'autant plus que je ne suis pas certain que ce soit la bonne instruction...

    Je vous remercie d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Vous pouvez utiliser la fonction COALESCE, qui renvoie le premier argument non null.

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Merci pour ta réponse Waldar,

    Je me suis renseigné sur cette instruction et j'ai modifié ma requête qui devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    	soc.nom as soc_nom,
    	COALESCE(CONCAT(user_attribue.nom, ' ', user_attribue.prenom), CONCAT(user_secteur.nom, ' ', user_secteur.prenom)) as commercial,	
    FROM societe soc
    INNER JOIN ville v ON soc.id_ville = v.id   
    INNER JOIN codepostal cp ON v.cp = cp.code   
    INNER JOIN secteur sect ON cp.id_secteur = sect.id   
    INNER JOIN user user_secteur ON sect.id_user = user_secteur.id   
    LEFT OUTER JOIN user user_attribue ON soc.id_user = user_attribue.id;
    Et celà fonctionne parfaitement

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

Discussions similaires

  1. récupérer les evenements associés à une date du calendrier
    Par sajodia dans le forum Zend Framework
    Réponses: 1
    Dernier message: 05/04/2011, 11h52
  2. Réponses: 25
    Dernier message: 26/06/2009, 14h15
  3. Réponses: 0
    Dernier message: 09/04/2008, 18h43
  4. [JSTL] [Map] comment récupérer la valeur associée à une clé
    Par jamal_id dans le forum Taglibs
    Réponses: 8
    Dernier message: 02/08/2007, 15h51
  5. Récupérer l'objet associé à une ligne de datagrid
    Par tiboleo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/04/2007, 10h16

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