Bonjour,
Voila mes tables:
friends:
| id_invitation
| id_exp
| id_des
| active
users:
| id
| prenom
| nom
| email
| password
j'ai deux requetes:
1: la premiere me retourne la liste des amis.
SELECT *
FROM users U
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 U.id <> :id
AND F.active = 1
2: la seconde me retourne uniquement les amis communs entre deux utilisateurs.
SELECT u.id,
u.nom, u.prenom, u.avatar
FROM users u
INNER JOIN
(
SELECT id_exp, id_des
FROM friends
WHERE id_exp IN(:id_exp, :id_des)
AND active = 1
UNION
SELECT id_des, id_exp
FROM friends
WHERE id_des IN(:id_exp, :id_des)
AND active = 1
) tmp ON tmp.id_des = u.id
GROUP BY u.id
HAVING COUNT(*) = 2
Je veux une requete qui va joindre les deux requetes(en haut) pour me retourner uniquement les amis qui ne sont pas communs aux deux utilisateurs.
J'ai fait quelque recherches, on m'a parler de DISTINCT mais je ne trouve de solution.
"La même avec NOT IN"
Comment?
J'ai essayé celà:
SELECT
*
FROM
users U
INNER 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
(U.id <> :id_k
AND F.active = 1)
AND NOT IN(SELECT u.id,
u.nom, u.prenom, u.avatar
FROM users u
INNER JOIN
(
SELECT id_exp, id_des
FROM friends
WHERE id_exp IN(:id_exp, :id_des)
AND active = 1
UNION
SELECT id_des, id_exp
FROM friends
WHERE id_des IN(:id_exp, :id_des)
AND active = 1
) tmp ON tmp.id_des = u.id
GROUP BY u.id
HAVING COUNT(*) = 2)
Ca produit plutôt une erreur.
Merci.