2016-06-28 7 views
0

DBには、ユーザーの詳細を格納するテーブルと、チームの詳細を格納するテーブルと、どのチームがユーザーに属しているかを認識するためのユーザーとチームIDを格納するテーブルがあります。このクエリを正しく使用するには?

選択したグループに属しているDBからすべてのユーザーを取得するようになりました。そして、私はこのようなことをやっている:

SELECT u.name, u.image FROM groups g, user_groups ug, users u WHERE 
g.id = ? AND ug.group_id = g.id 

enter image description here

しかし、私は望んでいた結果を得ていませんよ。あなたは上記の添付画像で見ることができるように、私は1つのグループに2人のユーザーを持っているので、私は私の応答に二つのレコードを期待していますが、これは私が反応して取得していますものです:

JSON response:

{ 
    "error": false, 
    "users": [ 
    { 
     "name": "Dušan Dimitrijević", // This is the user from selected group, but i'm getting duplicate record 
     "image": "http://192.168.42.6:8081/timster/uploads/user_images/%2018.png" 
    }, 
    { 
     "name": "Dušan Dimitrijević", 
     "image": "http://192.168.42.6:8081/timster/uploads/user_images/%2018.png" 
    }, 
    { 
     "name": "Miroslav", // And this one too, but also duplicated 
     "image": "null" 
    }, 
    { 
     "name": "Miroslav", 
     "image": "null" 
    }, 
    { 
     "name": "Pera Peric", 
     "image": "null" 
    }, 
    { 
     "name": "Pera Peric", 
     "image": "null" 
    }, 
    { 
     "name": "Marko Markovic", 
     "image": "null" 
    }, 
    { 
     "name": "Marko Markovic", 
     "image": "null" 
    }, 
    { 
     "name": "Stefan Dimitrijevic", 
     "image": "null" 
    }, 
    { 
     "name": "Stefan Dimitrijevic", 
     "image": "null" 
    }, 
    { 
     "name": "Petar Nikolic", 
     "image": "null" 
    }, 
    { 
     "name": "Petar Nikolic", 
     "image": "null" 
    }, 
    { 
     "name": "Nikola Ristic", 
     "image": "null" 
    }, 
    { 
     "name": "Nikola Ristic", 
     "image": "null" 
    } 
    ] 
} 

だから、私は私の質問SELECTで何か間違っていると思います。

+0

名前、画像、ユーザー、グループ。あなたが何を言っているのか分かりません。 – Strawberry

+0

ユーザーは2つのグループに所属しています。結果にグループIDを含めるようにクエリを変更した場合、結果は実際に重複していないことがわかります – dimlucas

+0

'ug'テーブルを削除する必要があります。あなたの2つのリンクを 'users'データベースに入れてください。その後、 'u.group_id = g.id'を実行して関連するチームのみを取得することができます – tektiv

答えて

5

私はあなたの関係を間違って実装していると思う、ユーザーIDに基づいてuser_groupテーブルに参加する必要があります。

そしてまた、あなたが文を登録しよ使用を検討してください:

SELECT 
    u.name, 
    u.image 
FROM 
    users u 
INNER JOIN 
    user_groups ug 
    ON ug.user_id = u.id 
WHERE 
    ug.group_id = ? 

(私はあなたのUSER_GROUPテーブルはuser_idのフィールドを持っていたと仮定?)

+0

はい、あります。私はこれを試してみましょう。 –

+0

それはそれです。感謝する! –

0

をこのように異なるテーブル間のSELECTクエリを実行するには:

SELECT * FROM table1,table2,table3 

これは、テーブル間にデカルトプロダクト(= CROSS JOIN)を実行しています。これにより、多くのデータを複製して、異なるテーブルのすべての可能な組み合わせを含むテーブルを作成します。

は、CROSSについてのいくつかのドキュメントがより良いと考えているあなたはINNER JOINを使用する必要がありますあなたのケースでは、 here

のJOINを参照してください。

関連する問題