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 :
Ensuite côté applicatif quand je récupère les données je fais quelque chose du genre :
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;
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![]()
Partager