SELECT jointure de données sur une même table

Mammouth du PHP | 1353 Messages

02 déc. 2008, 13:11

Bonjour,

Désolé si le titre n'est pas clair je vais essayer de mieux formuler la question :)

Admettons une table
id | nom | id_autre

Code : Tout sélectionner

CREATE TABLE `people` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) NOT NULL, `id_autre` int(11) NOT NULL, PRIMARY KEY (`id`) )
avec id_autre l'id d'une autre personne dans la table.

La question toute bête j'en suis sur est la suivante :

Comment récupérer directement le nom de la personne et le nom de l'autre en une seule requete ??

En gros quelque chose du genre
SELECT id as id1, nom, (SELECT nom FROM people WHERE id=id1) as nom2, FROM people

Sauf que bien sur cela ne marche pas...

Faut il faire un JOIN sur la même table ?

Je pense qu'il doit y avoir une méthode simple mais je la trouve pas :(

Merci d'avance.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 3607 Messages

02 déc. 2008, 13:43

Tu as essayé un truc genre

Code : Tout sélectionner

SELECT t1.nom,t2.nom FROM tatable as t1 JOIN tatable as t2 ON t1.id=t2.id_autre

Mammouth du PHP | 1353 Messages

02 déc. 2008, 14:43

Parfait ca marche niquel !! :)

Merci, désolé je suis pas bon en jointure...

Mais juste par curiosité, on est obligé d'utiliser les jointures même si c'est sur une même table ??
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 3607 Messages

02 déc. 2008, 14:45

Désolé mais là je peux pas t'en dire plus... :(
Mais je suis pas assez fort pour aller plus loins... ;)

Mammouth du PHP | 1353 Messages

02 déc. 2008, 15:53

C'est déjà parfait tu as résolu mon problème !! :)
Je laisse juste un peu en "non résolu" pour avoir des précisions si quelqu'un passe par là...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 422 Messages

02 déc. 2008, 19:52

Mais juste par curiosité, on est obligé d'utiliser les jointures même si c'est sur une même table ??
Non, pas du tout. Le mécanisme qui est utilisé ici est celui des alias. Quand tu as besoin d'utiliser 2 fois la même table dans une requête, tu mets un alias à l'une des deux (ou aux deux), afin que l'interpréteur SQL les considère comme deux tables différentes.
Tu peux également utiliser les alias pour avoir à éviter de recopier des noms trop longs dans une requête. Enfin tu peux utiliser les alias sur les noms de colonne lorsqu'il y a des ambiguités (cas fréquent quand justement on utilise deux fois la même table)

exemple : sélection d'un père, d'un fils et de leurs villes de naissance respectives

Code : Tout sélectionner

SELECT P.NOM AS NOMPERE, P.PRENOM AS PRENOMPERE, V.NOM AS VILLEPERE, F.NOM AS NOMFILS, F.PRENOM AS PRENOMFILS, W.NOM AS VILLEFILS FROM PERSONNE AS P, PERSONNE AS F, COMMUNE AS V, COMMUNE AS W WHERE P.ID = F.IDPERE AND V.ID = P.IDCOMMUNE AND W.ID = F.IDCOMMUNE

Mammouth du PHP | 1353 Messages

03 déc. 2008, 11:55

Effectivement !

Merci beaucoup :)

Ma requete finale :

Code : Tout sélectionner

SELECT s.name AS personne, c.name AS related FROM people AS s, people AS c WHERE c.id = s.id_autre
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 3607 Messages

03 déc. 2008, 19:46

Celà dit en passant, ça reste une jointure ;)
C'ets pas parce que y a pas le JOIN...