Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1396 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RÉSOLU] [SQL] simplifier 4 requetes en 1

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RÉSOLU] [SQL] simplifier 4 requetes en 1

n°2324660
stef_dober​mann
Personne n'est parfait ...
Posté le 22-11-2018 à 16:42:49  profilanswer
 

Bonjour,
 
Voici les tables j'utilise : J'ai retiré tous les champs inutile afin d'améliorer la clarté:
 

Code :
  1. CREATE TABLE CENTRES (
  2.   numcentre TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   numgerantsite MEDIUMINT UNSIGNED NOT NULL,
  4.   numresponsablesite MEDIUMINT UNSIGNED NOT NULL,
  5.   numsuiviadmifinance MEDIUMINT UNSIGNED NOT NULL,
  6.   numresponsablepeda MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
  7.   PRIMARY KEY(numcentre)
  8. );
  9. Exemple de valeur de la table
  10. umcentre => 15
  11. numgerantsite => 31
  12. numresponsablesite => 37
  13. numsuiviadmifinance => 41
  14. numresponsablepeda => 23
  15. CREATE TABLE GENS (
  16.   numgens MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  17.   titregens ENUM('M','Mme','Me','Dr','Pr') NOT NULL,
  18.   nomgens VARCHAR(50) NOT NULL,
  19.   prenomgens VARCHAR(50) NOT NULL,
  20.   PRIMARY KEY(numgens)
  21. );


 
je souhaite faire une requete SQL afin de rattacher les champs numresponsablesite à un numgens, numgerantsite à un autre numgens,...
 
Actuellement je fais une requête SQL pour trouver chaque nom mais je voudrais savoir si en 1 seule requête c'était possible. Juste dans un but d'optimisation du code.

Code :
  1. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numgerantsite
  2. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numresponsablesite
  3. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numsuiviadmifinance
  4. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numresponsablepeda


 
J'ai essayé :

Code :
  1. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numgerantsite
  2. UNION
  3. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numresponsablesite
  4. UNION
  5. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numsuiviadmifinance
  6. UNION
  7. SELECT concat(titregens," ",prenomgens," ",nomgens) FROM gens, centres WHERE numgens = numresponsablepeda


mais je trouve ça pas très propre !
 
si vous avez des idées, une solution plus simple, le top serait d'avoir 1 requete qui donnerais ce résultat :
numgerantsite | numresponsablesite | numsuiviadmifinance | numresponsablepeda
M truc muche  | M machin chose       | Mme machine bidule  | Mme machine chose
 
Edit : Résolu :jap:


Message édité par stef_dobermann le 28-11-2018 à 14:54:45

---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le 22-11-2018 à 16:42:49  profilanswer
 

n°2324680
dede_sav
Posté le 22-11-2018 à 23:26:58  profilanswer
 

Salut,
 
Regarde les jointures.
 
Un truc comme ca:

Code :
  1. SELECT
  2.            concat(G1.titregens," ",G1.prenomgens," ", G1.nomgens) as numgerantsite ,           
  3.            concat(G2.titregens," ",G2.prenomgens," ", G2.nomgens) as numresponsablesite,           
  4.            concat(G3.titregens," ",G3.prenomgens," ", G3.nomgens) as numsuiviadmifinance,           
  5.            concat(G4.titregens," ",G4.prenomgens," ", G4.nomgens) as numresponsablepeda
  6.        FROM centres
  7.        LEFT JOIN gens as G1 on G1.numgens = numgerantsite
  8.        LEFT JOIN gens as G2 on G2.numgens = numresponsablesite
  9.        LEFT JOIN gens as G3 on G3.numgens = numsuiviadmifinance
  10.        LEFT JOIN gens as G4 on G4.numgens = numresponsablepeda


   


Message édité par dede_sav le 22-11-2018 à 23:31:37
n°2324681
rufo
Pas me confondre avec Lycos!
Posté le 22-11-2018 à 23:27:05  profilanswer
 

Je sais pas si j'ai bien tout compris mais je pense qu'avec plusieurs jointures sur la même table (en inner join ou left join) ça devrait le faire.

Code :
  1. SELECT concat(g1.titregens," ", g1.prenomgens," ", g1.nomgens) AS GERANT,
  2. concat(g2.titregens," ", g2.prenomgens," ", g2.nomgens) AS RESPSITE, ....
  3. FROM CENTRES c INNER JOIN GENS g1 ON (c.numgerantsite = g1.numgens)
  4. INNER JOIN GENS g2 ON (c.numresponsablesite = g2.numgens)...


Bref, t'as compris l'idée : tu rajoutes dans le SELECT les 2 autres colonnes et dans le FROM, 2 fois encore la table GENS avec les liens sur les bons champs. Tu peux mettre des LEFT JOIN si certains ID dans ta table CENTRES peuvent être NULL mais vu la déclaration de tes tables, ça semble pas être le cas.


Message édité par rufo le 22-11-2018 à 23:28:28

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2324685
stef_dober​mann
Personne n'est parfait ...
Posté le 23-11-2018 à 08:53:56  profilanswer
 

C'est très con, mais je n'avais pas pensé à mettre mettre la table jointe en g1 g2,...
Ca marche nikel. Merci beaucoup :jap:


---------------
Tout à commencé par un rêve...
n°2324686
stef_dober​mann
Personne n'est parfait ...
Posté le 23-11-2018 à 08:57:12  profilanswer
 

Merci les gars, ça marche nickel :jap:
j'avais pensé à inner joint, mais pas en faisant référence comme ça à l'autre table !


---------------
Tout à commencé par un rêve...
n°2324687
rufo
Pas me confondre avec Lycos!
Posté le 23-11-2018 à 09:36:00  profilanswer
 

Pas de quoi :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RÉSOLU] [SQL] simplifier 4 requetes en 1

 

Sujets relatifs
Identifier la clause where succès dans requête SQLCréation d'une liste en SQL
[Greasemonkey] intercepter/filtrer requêtes AJAX?[PHP] SQL_SRV ne fonctionne point :(
SQL Créer une vue avec Nom Champs et Valeur dans des enregistrements[SQL Server - Cobol] Donnée DATETIME2
Boucle en SQLGestionnaire de contenu moderne [PHP, SQL] Forum de discussion
Noob: Oracle SQL probleme conversion date[SQL] Requête sur une liste d'adresse ip
Plus de sujets relatifs à : [RÉSOLU] [SQL] simplifier 4 requetes en 1


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR