2017-09-25 3 views
0

私のウェブサイトにはメンバーがいます。これらのメンバーはprojetsを作成することができ、そして他のメンバーは、すべてのプロジェクトを追跡することができます配列を使った重複したMysqlリクエスト

私は、次の列で「メンバー」という名前の最初のMySQLのテーブルを持っている: id/name

私は「プロジェクト」と名付け二MySQLのテーブルを持っています: id/founder

私は「フォロー」と名付け二MySQLのテーブルを持っている: id/idmember/idproject

私の目標は、すべてのメンバーsの乗組員を示すことですO:

リストのすべてのメンバー:

  • は私が

  • しまし設立したプロジェクトに従ってください私と同じ(S)プロジェクト(複数可)をフォロー私が従うプロジェクトを創設しました

しかし、私は結果が重複なしで表示されます。たとえば、私があなたのプロジェクトに従って、私があなたが従うプロジェクトの創始者であるなら、あなたは私を一度しか見る必要がありません。

私はアレイで作業を始めましたが、それは良い解決策に見えますが、どうやってそれを行うのか本当に分かりません。おかげさまで あなたのmembers.id1337Projects.founderであると仮定すると、

+0

あなたがMySQLの '' DISTINCT'を使用することができるはずです重複を排除する。私たちはそれを見ることができるようにここにあなたのSQLコードを投稿してください。 – kmoser

答えて

0

は、あなたが重複し、その上DISTINCTでテーブルを作るためにUNIONを使用することができますmembers.idをキーに外国人である:

SELECT DISTINCT id, name 
FROM (
    SELECT members.id, members.name 
    FROM members, Follow f1, Follow f2 
    WHERE members.id = f1.idmember 
    AND f1.idproject = f2.idproject 
    AND f2.idmember = 1337 
    UNION 
    SELECT members.id, members.name 
    FROM members, Follow, Project 
    WHERE members.id = Follow.idmember 
    AND Project.id = Follow.idproject 
    AND Project.founder = 1337 
    UNION 
    SELECT members.id, members.name 
    FROM members, Follow, Project 
    WHERE Follow.idmember = 1337 
    AND Project.id = Follow.idproject 
    AND Project.founder = members.id 
) 
+0

ありがとう!非常に興味深いですが、私にとってはちょっと複雑です...私は完全に理解できません::) f1とf2はエイリアスですか? – Damien

+0

正しい。 'SELECT'ステートメントでそのテーブルが2回必要なので、別名を付ける必要があります。 – wogsland

関連する問題