2016-06-28 71 views
0

我在我的数据库中有三个表格,一个用于存储用户详细信息,一个用于存储团队详细信息,另一个用于存储用户和团队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

,但我没有得到结果我想要的。正如你可以在上面附加的图片看,我有两个一组的用户,所以我在我的回应期待两项纪录,但是这是我得到响应:

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

用户属于两个组,这就是为什么。如果修改查询以在结果中包含组标识,您将看到结果实际上不是重复的 – dimlucas

+0

您应该删除'ug'表。并把你的两个人的链接放在用户数据库中。然后,你将能够执行'u.group_id = g.id'来只读取相关的团队 – tektiv

回答

5

我认为你正在实现你的关系错误,你应该根据用户ID加入user_group表。

而且也,你应该考虑使用JOIN声明:(?我认为你USER_GROUP表有一个user_id的字段)

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

+0

是的,它有。让我试试这个。 –

+0

就是这样,先生。欣赏! –

0

做不同的表之间的SELECT查询是这样的:

SELECT * FROM table1,table2,table3 

这是做表(= CROSS JOIN)之间的笛卡尔乘积。这将复制大量数据,以制作包含不同表格的所有可能组合的表格。

查看有关CROSS一些文档JOIN here

在你的情况,你应该使用INNER JOIN,这是更apropriate。