[MYSQL] Lier des lignes d'une table à l'aide d'une 2eme tabl

WRInaute discret
Salut,

Une petite question MYSQL :)

J'ai une table personnes où chaque ligne est une personne identifiée par son id
Ces personnes peuvent avoir des liens entre eux ( famille, amitié etc )

J'ai crée une 2me table liens de la forme avec par exemple :
id1 | lien | id1
1 | ami | 2
1 | famille | 5

Du coup, quand j'affiche la profil de 1, je cherche dans la table liens tous les amis de 1. Bien sûr je veux aussi afficher 1 en tant qu'ami sur le profil de 2.
Du coup, quand je cherches les amis de 1, je dois chercher dans cette table où id1 = 1 ou id2 = 1..

Est-ce que j'ai choisi la bonne méthode ou devrais-je stocker plutôt la relation de 1 et 2 comme ceci :

id1 | lien | id1
1 | ami | 2
2 | ami | 1

et juste chercher par rapport a la première colonne ?

Merci de vos avis :)
 
WRInaute passionné
Hummm ça se vaut, perso je pense que je pencherais pour la seconde méthode, ça simplifie les requêtes (mais t'obliges à gérer ça plus finement).
Et t'as plus de possibilités, qq'un peut être ami de qq'un sans que l'autre le sois (conflict? :p )
 
WRInaute discret
Merci de ta réponse Bactéries,

En fait l'exemple n'est pas celui que je fais ( les personnes ). C'est juste que je n'aime pas utiliser les vrais concepts que je développe :P

Pour en revenir au pb, ici il faut imaginer que si, un lien marche forcément dans les deux sens ( si 1 est ami de 2, alors 2 est ami de 1 )

La deuxième solution prends deux fois plus de places. Mais oui, l'avantage c'est qu'elle simplifie les requêtes de consultation. Après pour éditer, il faut toujours éditer deux lignes.

La première solution prends donc moins de place ( une ligne au lieu de deux ) mais les requêtes sont de cette forme ( enfin c'est à quoi j'arrive pour l'instant, c'est peut-être pas la plus optimisée ? )

Requête pour récupérer pour une personne les id des personne qui ont un lien avec elle :
($id_personne est l'id de la personne du profil consulté)
Code:
SELECT id1,link,id2,p.prénom
FROM links
LEFT JOIN personnes p ON p.id = (CASE WHEN id1='".$id_personne."' THEN id2 ELSE id1 END)
WHERE id1='".$id_personne."' OR id2='".$id_personne."' "
 
Discussions similaires
Haut