2016-10-18 3 views
1

私のデータベースは現在2つのテーブルで構成されています。 1つはユーザテーブルで、もう1つはフォロワーテーブルです。MySQLは特定のユーザからフォロワーをCで取得しています

User 1 | id = 1 
User 2 | id = 2 
User 3 | id = 3 

し、ユーザー1ユーザー2とユーザー2を次の:私は3人のユーザーを持っているのであれば

Table: followers 
Row: user_id | follower_id 

:ユーザーがフォロワーテーブルはこのようになります行を持つことになります意味し、お互いに従うことができますユーザー3を、以下、フォロワーテーブルの行は次のようになります。

user_id = 2 | follower_id = 1 
user_id = 3 | follower_id = 2 

このすべてが正常に動作しますが、私はC#で、このユーザーからのすべての信者を取得する際にどのように私は、クエリを作成する必要がありますか?私のクラスには、このユーザーに従う人のIDのリストがあります。このように:私は、データベースからユーザーを取得することができ

public class User 
{ 
    public int id { get; set; } 
    public List<int> followers { get; set; } 
} 

(これは、ユーザーオブジェクトのリストであることができ、私はちょうど今のIDを必要とする)、私はただの信者を取得する方法を見つけ出すことはできませんこのユーザーはすべて1つのクエリでどんな助けもありがとう!

+0

特定のユーザーに対して、すべての異なるフォロワーまたはフォロワーのリストが必要です。それが後であれば、あなたのクラスはあなたにリストを与えるべきです。私が正しく理解している場合... – A3006

+0

'私はこのユーザーからのフォロワーをすべてC#で検索したい'どのユーザーですか? – Gavin

+0

SQLでは、これはユーザーテーブルとフォロワーテーブルの間のJOINを使用して行われます。あなたは使用するクエリテキストを探していますか? – Steve

答えて

1

クエリは次のようになります。

SELECT u.id, u.name, GROUP_CONCAT(f.follower_id) AS list_of_followers 
FROM user u 
JOIN followers f ON u.id = f.user_id 
WHERE u.id = 2 
GROUP BY u.id, u.name 

list_of_followersid=2を持つユーザーのすべての信者の単なるカンマ区切りリストです。文字列を簡単に解析してList<int>を取り込むことができます。

編集:

あなたもなしフォロワーを持つユーザーを取得したい場合は、次のようにあなたが上記のクエリを変更することができます。なしフォロワーcount_of_followers = 0を持つユーザーのために

SELECT u.id, u.name, 
     GROUP_CONCAT(f.follower_id) AS list_of_followers, 
     COUNT(f.follower_id) AS count_of_followers 
FROM user u 
LEFT JOIN followers f ON u.id = f.user_id 
WHERE u.id = 2 
GROUP BY u.id, u.name 

を。

+0

それは完璧に働いた、ありがとう! – RandomStranger

+0

すばらしい質問ですが、このクエリを使用してフォロワーを持たないユーザーを取得したいと考えています。私がそうしようとすると、nullを返します。これは修正可能ですか? – RandomStranger

+0

@Bas私が行った編集を確認してください。 –

関連する問題