如何正确使用此查询?

时间:2016-06-28 12:42:59

标签: php mysql

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

2 个答案:

答案 0 :(得分:5)

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

此外,您应该考虑使用JOIN语句:

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字段?)

答案 1 :(得分:0)

在不同的表之间执行SELECT查询,如下所示:

SELECT * FROM table1,table2,table3

这是在表格之间进行笛卡尔积(= CROSS JOIN)。这将复制大量数据,以创建一个包含不同表的所有可能组合的表。

请参阅有关CROSS JOIN

的一些文档

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