3

「ユーザー」と呼ばれる 1 つと「接続」と呼ばれる 2 つの mysql テーブルがあります。

テーブル users にはユーザーに関する情報があり、3 つの行があります。

mikha
guy
maricela

テーブル接続には、Twitter のようなユーザー間の接続があります (たとえば、mikha をフォローする maricela と maricela をフォローする mikha)。

Connections には次の行があります。

username1     | username2
--------------------------
guy           | maricela
mikha         | guy
mikha         | maricela

mikha さんのフォロー数やフォローバック数などの情報を知りたいです。

次のクエリを使用します。

SELECT *, COUNT(DISTINCT  connections.username1) AS count_following, 
   COUNT(DISTINCT connections.username2)  AS count_followers 
FROM users LEFT JOIN connections on connections.username1 = 'mikha' OR  
   connections.username2 = 'mikha' WHERE users.username = 'mikha'

期待される:

count_following = 2 (as mikha is following guy and maricela)
count_followers = 0 (no one following mikha yet)

実際:

count_following = 2
count_followers = 1

ありがとう よろしく マイケル

4

1 に答える 1

1

2つの異なるクエリを実行できます(ここでフィドル):

select
  (select count(*) from connections
  where username1 = 'mikha') following,
  (select count(*) from connections
  where username2 = 'mikha') followers

または、これを使用します(ここでフィドル):

select
    sum(username1 = 'mikha') following,
    sum(username2 = 'mikha') followers
from connections

2つ目はもっと速いはずだと思います。それを取得したら、そのテーブルから追加情報が必要な場合に備えて、usersテーブルに参加するだけです(例を考えると、必要ありません)。

于 2012-11-24T00:44:36.447 に答える