Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bringen Sie Follower dazu, wie mit MySQL zu twittern

Das sollte es tun:

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

Entfernen Sie den COUNT wenn du eine Freundesliste haben möchtest.

BEARBEITEN

Wie gewünscht, eine Erklärung.

Sie sind JOIN eine Tabelle an sich selbst zu übertragen, weil Sie an den Beziehungen zwischen Zeilen interessiert sind.

Ich habe mich entschieden, die Tabellen als me zu aliasieren und you um den Zusammenhang deutlich zu machen. Was das sagt, ist diese Spalte A kann mich als den Follower bezeichnen oder Sie als Follower. Spalte B bezieht sich auf den followee

Wenn Sie die Spalten umbenennen würden, würde die Abfrage klarer lesen

wenn A -> follower und B -> followee , hätten wir:

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

Es heißt also, nimm zwei Kopien dieser Tabelle und JOIN die Zeilen, in denen der Follower in me steht ist der Follower in you . Filtern Sie dann und zeigen Sie nur die Zeilen an, in denen sich der Follower in me befindet ist der Follower in you ... indem Sie Ihren Wunsch nach (A == B) && (B == A) festhalten

Vielleicht sind die Tabellenaliase nicht so toll, aber ich hoffe, das klärt ein wenig auf.

ZWEITE BEARBEITUNG Gemäß den Kommentaren unten könnte eine klarere Form sein:

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