Bonjour je fais un système d'amis pour un site et je me heurte à un problème. Je ne vois pas comment afficher les amis. Ma table **friends** se compose de 4 champs: - fr_id - fr_sender -> l'envoyeur de l'invit' - fr_receiver -> le receveur - fr_validate -> 0 = en attente; 1 = validé; 2 = refusé Voici ma requête actuellement: [code]SELECT * FROM friends JOIN users ON fr_sender = id JOIN country ON country = c_id JOIN city ON city = cy_id WHERE fr_receiver = ? && fr_validate = "1" ORDER BY name[/code] Cependant ma requête affiche les amis seulement et seulement si on est le receveur. Comment faire pour qu'elle se fiche de savoir si on est le receiver ou le sender ? Merci :)

7 réponses


erfou
Réponse acceptée

Salut,

as tu essayé ...WHERE (fr_receiver = ? OR fr_sender = ?) && fr_validate = "1"...

eric

Hotgeart
Auteur
Réponse acceptée

j'ai fais comme ceci : $req_f2 = $bdd->prepare('SELECT * FROM friends JOIN users ON (fr_sender = id OR fr_receiver = id) JOIN country ON country = c_id JOIN city ON city = cy_id WHERE (fr_receiver = ? OR fr_sender = ?) && fr_validate = "1" ORDER BY name');

Et l'or de l'affichage de met une condition pour éviter que le membre soit dans sa liste d'ami.

merci ;)

Salut.
Tu peux rajouté une ligne avec l'inverse si la validation est effectué.

Avant validation :
fr_id - fr_sender - fr_receiver - fr_validate
1 - Marcus - Jean - 0

Quand validation :
fr_id - fr_sender - fr_receiver - fr_validate
1 - Marcus - Jean - 1
2 - Jean - Marcus - 1

Sinon tu as une autre solution.
Tu crée une table avec juste les invitations :
fr_id - fr_sender - fr_receiver

Tu crée une nouvelle table avec juste les amis :
fr_id - fr_friend1 - fr_friend2

Hotgeart
Auteur

Merci pour ta réponse, mais je suis sur que y'a plus simple.

Hotgeart
Auteur

Oui ça marche. Cependant ça affichera affichera mon profil dans les résultats. Après je peux faire une condition pour que ça évite le probleme. Cependant il restera toujours un autre problème qui est dans le cas ou je suis le sender ça n'affichera pas le lien d'amitié. a cause de ce petit bout: SELECT * FROM friends JOIN users ON fr_sender = id

Immaginons que :
Tu m'envoie une requête d'amitié.
Je l’accepte.
Tu es le sender donc la requête va récupérer tes informations et donc ne jamais me mettre dans ta liste d'ami.

Je sais pas si j'arrive a faire passer e problème :p

En gros il devrait arriver a récupérer toutes les infos des amis que tu sois sender ou receiver.

Re

Tu peux faire une jointure deux fois sur la meme table, en mettant des alias pour eviter les pbs. (il faudra peut etre revoir tes clauses WHERE et ORDER)

JOIN users as alias1 ON fr_sender = alias1.id
JOIN users as alias2 ON fr_receiver = alias2.id

Eric