TABLE "profile"
id nome
1 UserA
2 UserB
3 Usuario1
4 Usuario2
5 Usuario3
6 Usuario4
TABLE "friends"
id amigo1 amigo2 status
2 3 2 1
4 4 1 1
5 2 5 1
6 1 5 1
7 6 1 0
If I use join, to return friends, it works OK (use id = 1 / UserA as the base)
SELECT perfil.id, perfil.nome,amigos.amigo1, amigos.amigo2, amigos.status FROM perfil
INNER JOIN amigos ON ((amigos.amigo1 = perfil.id) OR (amigos.amigo2 = perfil.id))
WHERE perfil.id != 1 AND (amigos.amigo1 = 1 or amigos.amigo2 = 1) AND amigos.status = '1' GROUP BY perfil.id ORDER BY rand() LIMIT 12
Return me
id nome amigo1 amigo2 status
4 Usuario 4 1 1
5 Usuario3 1 5 1
My question is, I can not return the values of those who are not friends with ID 1 / UserA
Join this way (applying in WHERE! = 1 (ID 1):
SELECT perfil.id, perfil.nome, amigos.amigo1, amigos.amigo2, amigos.status FROM perfil
INNER JOIN amigos ON ((amigos.amigo1 = perfil.id) OR (amigos.amigo2 = perfil.id))
WHERE perfil.id != 1 AND (amigos.amigo1 != 1 or amigos.amigo2 != 1) GROUP BY perfil.id ORDER BY rand() LIMIT 12
Results:
id nome amigo1 amigo2 status
6 Usuario4 6 1 0
5 Usuario3 2 5 1
4 Usuario2 4 1 1
2 UserB 3 2 1
3 Usuario1 3 2 1
My goal is that join does not show User3 (ID 5) in the list, as it is listed as a friend of ID 1.