Page 1 sur 1

SQL + PHP : Système d'amis

Posté : 15 déc. 2016, 18:46
par nico44530
Salut,

J'aimerai utiliser une requête sur le site https://openclassrooms.com/courses/cree ... ois-autres

Code : Tout sélectionner

$query = $db->prepare(' SELECT (ami_from + ami_to - :id) AS ami_id, ami_date, membre_pseudo, online_id FROM forum_amis LEFT JOIN forum_membres ON membre_id = (ami_from + ami_to - :id) LEFT JOIN forum_whosonline ON online_id = membre_id WHERE (ami_from = :id OR ami_to = :id) AND ami_confirm = :conf ORDER BY membre_pseudo'); $query->bindValue(':id',$id,PDO::PARAM_INT); $query->bindValue(':conf','1',PDO::PARAM_STR); $query->execute();
Vu qu'elle fonctionne, j'aimerai la comprendre avant de pouvoir l'utiliser.

Le passage avec "SELECT (ami_from + ami_to - :id) AS ami_id" me paraît un peu dur ^^
La jointure "ON membre_id = (ami_from + ami_to - :id)"
Et le passage de "WHERE (ami_from = :id OR ami_to = :id)"

Pour le reste, j'ai les bases, j'y arrive.

C'est la parenthèse, les signes = + - qui me bloque dans cette requête.
Merci pour votre aide =)

Re: SQL + PHP : Système d'amis

Posté : 15 déc. 2016, 20:04
par Aureusms
Est ce que ne serait-ce pas juste une addition et une soustraction ?

Re: SQL + PHP : Système d'amis

Posté : 16 déc. 2016, 01:17
par Spols
Oui le but est de récupèrer les amis from et les amis to d'un membre en particulier en une seule requète.
l'explication de la difference from / to est expliquée sur le lien.
donc chaque ligne aura soit ami_from soit ami_to qui sera égal à id (signe =)
mais par exemple si un membre id = 35 a :
un ami_from (id = 44)
un ami_from (id = 15)
un ami_to (id = 78)
un ami_to (id = 100)
donc pour chaque ligne, on va tenter de récupèrer l'id de l'ami qui n'a pas l'id recherché (35)
ligne 1 ami_from = 44 ami_to = 35 & id = 35 donc 44 + 35 - 35 = 44
ligne 3 ami_from = 35 ami_to = 78 & id = 35 donc 35 + 78 - 35 = 78
donc dans tous les cas on retrouve l'id de l'autre ami de 35. pas besoin de savoir distinguer si il est from ou to.