Cela devrait le faire :
SELECT COUNT(me.A) FROM social AS me
INNER JOIN social AS you ON me.B = you.A
WHERE me.A = you.B AND me.A = 1
Supprimez le COUNT
si vous voulez une liste d'amis.
MODIFIER
Comme demandé, une explication.
Vous êtes JOIN
un tableau à lui-même parce que vous vous intéressez aux relations entre les lignes.
J'ai décidé d'aliaser les tables en tant que me
et you
pour clarifier la relation. Ce que cela dit, c'est que la colonne A
peut me désigner comme le suiveur ou vous en tant que suiveur. Colonne B
fait référence au suivi
Si vous deviez renommer les colonnes, la requête se lirait plus clairement
si A
-> follower
et B
-> followee
, nous aurions :
SELECT COUNT(me.follower) FROM social AS me
INNER JOIN social AS you ON me.followee = you.follower
WHERE me.follower = you.followee AND me.follower = 1
Donc, il dit, prenez deux copies de cette table et JOIN
les lignes où le followee dans me
est le suiveur en you
. Ensuite, filtrez et affichez uniquement les lignes où le suiveur dans me
est le suiveur en you
... là en capturant votre désir d'avoir (A == B) && (B == A)
Peut-être que les alias de table ne sont pas si géniaux, mais j'espère que cela clarifie un peu.
DEUXIÈME MODIFICATION Selon les commentaires ci-dessous, une forme plus claire peut être :
SELECT COUNT(me.A) FROM social AS me
INNER JOIN social AS you ON me.A = you.B AND me.B = you.A
WHERE me.A = 1