Jointures sur une même table : c'est possible ? [SQLServer, C#] - SQL/NoSQL - Programmation
Marsh Posté le 23-09-2003 à 12:28:08
SQL pur ? SGBD utilisé ? un peu de prog avec ?
j'ai une soluce pour du php si tu veux
Marsh Posté le 23-09-2003 à 12:30:29
SqlServer, C# et ASP.Net
Donne tjs ta solution pour PHP, çà m'aidera sûrement !
Marsh Posté le 23-09-2003 à 12:36:39
tu récupères 3 lignes contenant le même client mais les 3 adresses différentes en faisant une jointure normale (en utilisant les ID)
à l'affichage avec une boucle classique, tant que le client ne change pas tu ne le réaffiches pas mais tu affiche juste l'adresse
donc au premier résultat tu affiche tous les champs retournés, ensuite uniquement les champs de l'adresse, si le nom (ou l'id) change on recommence avec les champs du client
en php ça se fait très bien à coup de mysql_data_seek() & co
j'utilise ce genre de système pour des stats, plutôt que de faire X requêtes, je récupères toutes les infos en une passe et je déplace le pointeur pour afficher les champs utiles (à l'usage c'est bien plus rapide, la quantité d'info est la même mais tu gagnes car tout est en mémoire)
Marsh Posté le 23-09-2003 à 12:40:44
Ouais ...
C'est un peu + compliqué que çà en réalité ...
Je ne pense pas pouvoir adapter ta méthode pour mon pb, mais je vais essayer qd même
Parce que ma requête ressemble à çà, et elle n'est pas terminée
Code :
|
D'autres IDs ?
Marsh Posté le 23-09-2003 à 12:55:03
commence par changer ton titre en éditant ton premier post et ajoute que c'est du MSSQL, C# & co, peut être qu'un peu plus de monde passera
Marsh Posté le 23-09-2003 à 13:02:40
Là c'est la pause déjeuner, c'est peut être pour çà qu'y a pas gd monde
Marsh Posté le 23-09-2003 à 16:27:37
Whynot !
SQL server ?
Que veux tu faire exactement ?
Tu peux donner un jeu d'essai et ce que
tu veux obtenir style
tab_client
=>
id_c adresse
----------------
1 001
1 002
2 003
3 001
tab_Adresse
=>
id_a libelle
---------------------
001 rue des larmes
002 rue des pieds
003 avenue bourgogne
et le résultat
id_c libelle
-----------------
...
Marsh Posté le 23-09-2003 à 19:54:13
la maniere dont j'ai compris le truc
table client
id id_adr1 id_adr2 id_adr3
table adresse.
id, libelle
Alors moi je ferais comme ca
Select cl.id, adr_1.libelle, adr_2.libelle, adr_3.libelle
from client cl,
adresse adr_1,
adresse adr_3,
adresse adr_2
where
id_adr1 = adr_1.id
and
id_adr2 = adr_2.id
and
id_adr3 = adr_3.id
Je dis peut etre de grosses conneries hein mais je crois pas.
Marsh Posté le 24-09-2003 à 08:35:59
Sébastien a écrit : la maniere dont j'ai compris le truc |
+1 je pense aussi qu'il demande un truc comme ça
Select cl.id, adr_1.libelle, adr_2.libelle, adr_3.libelle
from client cl,
adresse adr_1,
adresse adr_3,
adresse adr_2
where
cl.id_adr1 = adr_1.id
and
cl.id_adr2 = adr_2.id
and
cl.id_adr3 = adr_3.id
Marsh Posté le 24-09-2003 à 09:48:24
Bon, bah j'ai trouvé ( en fait c'est plutôt mon chef de projet qui a trouvé )
Il faut utiliser des alias de table et les LEFT OUTER JOIN, et çà donne une requête comme çà ( juste pour le nom de la voie ) :
Code :
|
Et le résultat :
Marsh Posté le 23-09-2003 à 12:14:52
J'ai une table Clients et une table Adresses.
Ds ma table Clients, j'ai 3 ID qui pointent sur 3 adresses différentes.
Comment récupérer mon client et ses 3 adresses en 1 seule requête ?
Message édité par WhyMe le 23-09-2003 à 13:07:49