MySQL:联接两个具有匹配行名的表

时间:2018-07-28 01:09:47

标签: php mysql

我有两个这样的表:

user_users

ID    UserGroup    Email
1     3            first@domain.com
2     3            second@domain.com

user_groups

ID    GroupName
2     Some Group
3     Another Group

我正在通过一个查询从两个表中检索数据,就像这样:

SELECT u.*, g.GroupName FROM user_users u JOIN user_groups g ON u.UserGroup = g.ID

我遇到的问题是我需要检索两个表中的所有列,但是user_users表和user_groups表的列名均为ID

所以,这个:

SELECT u.*, g.* FROM user_users u JOIN user_groups g ON u.UserGroup = g.ID

...不会从ID表中返回user_groups

如何修改此查询,以使user_groups表中的所有列都可以作为一个数组返回?结果将如下所示:

[
    'ID' => 2,
    'UserGroup' => 3,
    'Email' => 'second@domain.com',
    'GroupTable' => [
        'ID' => 3,
        'GroupName' => 'Another Group'
    ]
]

3 个答案:

答案 0 :(得分:2)

您可能需要指定每个字段,并为ID字段放置字段别名:

SELECT u.ID as ‘User ID’, u.UserGroup, u.Email, g.ID as ‘Group ID’  g.GroupName FROM user_users u JOIN user_groups g ON u.UserGroup = g.ID

或者尝试仅指定ID字段,如下所示:

SELECT u.ID as ‘User ID’, u.*, g.ID as ‘Group ID’, g.* FROM user_users u JOIN user_groups g ON u.UserGroup = g.ID

答案 1 :(得分:1)

您应该尝试此操作并将其获取为数组结构,请通过代码对其进行修改:

SELECT 
  ux.*, 
  uy.* 
FROM 
  user_groups uy 
  JOIN (
    SELECT 
      u1.* 
    FROM 
      user_users u1 
      LEFT JOIN user_users u2 ON (
        u1.UserGroup = u2.UserGroup 
        AND u1.id < u2.id
      ) 
    WHERE 
      u2.id IS NULL
  ) ux ON ux.UserGroup = uy.ID;

答案 2 :(得分:0)

//嗨,这可能对您有帮助。

$sqlQuery = 'SELECT * FROM user_groups';

$stmt = $conn->prepare($sqlQuery);
$stmt->execute();
$output = $stmt->fetchAll();

$sqlUGQuery = 'SELECT * FROM user_users WHERE UserGroup=:userGroupId';
$stmtUG = $conn->prepare($sqlUGQuery);
foreach ($output as $key => &$value) {
    $stmtUG->execute([':userGroupId'=>$value['id']]);
    $value['GroupTable'] = $stmtUG->fetchAll();
}

echo "<pre>";
print_r($output);
echo "</pre>";
exit;

输出将如下所示。 enter image description here