Bonjour,
Je voudrais avant d'envoyer une invitation, verifier d'abord si les deux utilisateurs ne sont pas dejà amis.
Ma table utilisateurs:
id
prenom
nom
password
Ma table friends:
id_invitation
id_exp
id_des
active
date_invitation
date_acceptation
Requete qui affiche la liste des utilisateurs:
$q = $bdd->prepare("SELECT
*
FROM
users U
LEFT JOIN friends F
ON ( U.id = F.id_exp AND F.id_des = :id )
OR ( U.id = F.id_des AND F.id_exp = :id )
WHERE
F.id_invitation IS NULL
AND U.id <> :id ORDER BY RAND() LIMIT 5");
$q->execute(array(
"id" => info_profil()->id
));
En un mot, Je veux une requete qui verifiera si deux utilisateurs sont amis; .
croyer moi j'ai beaucoup cherché cette requete en vain.
Merci d'avance.
Salut,
Il te faut l'id de la personne qui lance l'invitation et celle de la personne qui reçoit l'invitation. A partir de là, il te suffit de vérifier si tu as une entrée correspondante à l'id de l'user qui émet la demande, et l'id du user qui reçoit la demande.
SELECT IF(f.id_invitation, TRUE, FALSE) AS are_friends, CONCAT(u1.nom, ' ', u1.prenom) AS emetteur, CONCAT(u2.nom, ' ', u2.prenom) AS recepteur
FROM friends AS f
LEFT JOIN users AS u1 ON u1.id = f.id_exp
LEFT JOIN users AS u2 ON u2.id = f.id_des
WHERE f.id_exp = :id_exp
AND f.id_des = :id_des
AND date_acceptation IS NOT NULL // Seulement dans le cas où ils sont déja amis
Je précise que je n'ai pas testé cette requête, il est possible qu'il faille faire des modifications.
Si tu as besoin d'explications ou quoi, n'hésite pas :)
J'ai modifié ta reponse pour l'adaptée et ça fonctionne à perfection.
$qq = $bdd->prepare(" SELECT id_invitation
FROM friends AS f
LEFT JOIN users AS u1 ON u1.id = f.id_exp
LEFT JOIN users AS u2 ON u2.id = f.id_des
WHERE (f.id_exp = :id_exp AND f.id_des = :id_des )
OR (f.id_exp = :id_des AND f.id_des = :id_exp)
");
$qq->execute(array(
"id_exp" => info_profil()->id,
"id_des" => $_POST['invitation_envoye']
));
Congratulations.
Tu pourrais m'aider aussi à obtenir les amis communs entre deux utilisateurs ?
Merci beacoup.
Montres nous le code que tu as déjà fait ainsi que le soucis que tu rencontres et on t'aidera volontier mais on va malheureusement pas te le coder nous ;)
SELECT
U2.id,
U2.prenom,
U2.nom,
U2.email,
U2.password
FROM
friends F1
INNER JOIN users U1
ON ( U1.id = F1.id_exp AND F1.id_des = 'id user connecté' )
OR ( U1.id = F1.id_des AND F1.id_exp = 'id user connecté' )
INNER JOIN friends F2
ON ( U1.id = F2.id_exp AND F2.id_des <> 'id user connecté' )
OR ( U1.id = F2.id_des AND F2.id_exp <> 'id user connecté' )
INNER JOIN users U2
ON U1.id = F2.id_exp
OR U1.id = F2.id_des
WHERE
U1.id <> 'id user connecté'
AND F1.valide = 1
AND F2.valide = 1
J'ai fait ce code, ça produit pas d'erreur mais ça me retourne les amis de mes amis alors que moi je veux les amis communs entre deux utilisateurs.
MercI
Oula t'es parti loin. xD
Essaie un truc du genre (j'ai pas testé)
SELECT F1.Person2 as common_friend
FROM friends as F1 JOIN friends as F2 USING (Person2)
WHERE F1.id_exp = 'id user connecté' AND F2.id_exp = 'id user connecté'
AND F1.active = 1 and F2.active = 1
Par contre je pars du principe que tu as 2 entrées pour 1 relation d'amis.
Genre 1 est ami avec 2 pour la première entrée et la deuxième 2 est ami avec 1. (niveau optimisation et malgré le double d'entrée en BDD c'est le top).
Person2 c'est quoi ???
j'ai testé mais ça produit autre chose.
je pense qu'il faudra renseigner deux variables id_exp et id_des pour savoir les amis communs entre ces deux variables.
Genre "id_exp" est ami avec "id_des" et ces deux aussi sont tous deux amis avec par example 3(supposition).
Je voudrais quand on fait la requete pour recuperer l'ami commun entre id_exp et id_des, on obtient 3 puisqu'il est commun entre ces deux variables.
Merci et j'espere etre comprsi.