代码之家  ›  专栏  ›  技术社区  ›  MultiDev

MySQL:用匹配的行名连接两个表

  •  0
  • MultiDev  · 技术社区  · 6 年前

    我有两张这样的桌子:

    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

    我遇到的问题是,我需要检索两个表中的所有列,但是 用户 桌子和 用户组 表的列名为 ID .

    所以,这个:

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

    ... 将不返回 身份证件 用户组 桌子。

    如何修改此查询,以便 用户组 表可以作为一个数组返回?结果如下:

    [
        'ID' => 2,
        'UserGroup' => 3,
        'Email' => 'second@domain.com',
        'GroupTable' => [
            'ID' => 3,
            'GroupName' => 'Another Group'
        ]
    ]
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   alimbaronia    6 年前

    您可能需要指定每个字段并为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
    
        2
  •  1
  •   Pierre.Vriens Krzysztof J    6 年前

    您应该尝试此操作并将其放入数组结构中,请通过以下代码进行修改:

    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;
    
        3
  •  0
  •   Krishna Jonnalagadda    6 年前

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

    $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