To powinno wystarczyć:
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
Usuń COUNT
jeśli chcesz listę znajomych.
EDYTUJ
Zgodnie z żądaniem wyjaśnienie.
Jesteś JOIN
tabelę do siebie, ponieważ interesują Cię relacje między wierszami.
Zdecydowałem się aliasować tabele jako me
i you
aby związek był jasny. Oznacza to, że kolumna A
może nazywać mnie obserwatorem lub ty jako obserwujący. Kolumna B
odnosi się do obserwatora
Jeśli zmienisz nazwy kolumn, zapytanie będzie bardziej czytelne
jeśli A
-> follower
i B
-> followee
, mielibyśmy:
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
To znaczy, weź dwie kopie tej tabeli i JOIN
wiersze, w których obserwujący w me
jest obserwatorem w you
. Następnie przefiltruj i pokaż tylko te wiersze, w których obserwujący w me
jest obserwowanym w you
... tam poprzez uchwycenie pragnienia posiadania (A == B) && (B == A)
Być może aliasy tabel nie są tak wspaniałe, ale mam nadzieję, że to trochę wyjaśnia.
DRUGA EDYCJA Zgodnie z poniższymi komentarzami jaśniejszą formą może być:
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