Mělo by to stačit:
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
Odeberte COUNT
pokud chcete seznam přátel.
UPRAVIT
Jak bylo požadováno, vysvětlení.
Jste JOIN
tabulku pro sebe, protože vás zajímají vztahy mezi řádky.
Rozhodl jsem se pojmenovat tabulky jako me
a you
aby byl vztah jasný. Říká se tím sloupec A
může mě označovat jako sledovníka nebo vy jako sledující. Sloupec B
odkazuje na následujícího
Pokud byste přejmenovali sloupce, dotaz by se četl jasněji
pokud A
-> follower
a B
-> followee
, měli bychom:
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
Takže to říká, vezměte si dvě kopie této tabulky a JOIN
řádky, kde je následovník v me
je následovník v you
. Poté filtrujte a zobrazte pouze řádky, kde je následovník v me
je sledující ve you
... tam zachycením vaší touhy mít (A == B) && (B == A)
Možná nejsou aliasy tabulek tak skvělé, ale doufám, že to trochu objasní.
DRUHÁ ÚPRAVA Podle níže uvedených komentářů může být jasnější forma:
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