Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:使用匹配的行名称连接两个表_Php_Mysql - Fatal编程技术网

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

Php MySQL:使用匹配的行名称连接两个表,php,mysql,Php,Mysql,我有两张这样的桌子: 用户 用户组 我在一个查询中从两个表中检索数据,如下所示: 选择u.*,g.GroupName FROM user_users u JOIN user_groups g ON u.UserGroup=g.ID 我遇到的问题是,我需要检索两个表中的所有列,但是user_users表和user_groups表的列名都是ID 那么这个, 在u.UserGroup=g.ID上,从user\u users u JOIN user\u groups g中选择u.*,g.* 。。。不会从

我有两张这样的桌子:

用户

用户组

我在一个查询中从两个表中检索数据,如下所示:

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

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

那么这个,

在u.UserGroup=g.ID上,从user\u users u JOIN user\u groups g中选择u.*,g.*

。。。不会从用户组表返回ID

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

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

您可能需要为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

您可能需要为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

您应该尝试此操作,若要在数组结构中获得此操作,请通过以下代码修改此操作:

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;

您应该尝试此操作,若要在数组结构中获得此操作,请通过以下代码修改此操作:

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;

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

$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;
输出将如下所示。

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

$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;
输出将如下所示。

谢谢,我考虑过了,但是有很多列比示例中显示的要多,所以我尝试在不必指定每个列的情况下执行此操作。添加的解决方案是一个非常糟糕的主意!它将检索id列两次。只是为了节省一点打字时间…谢谢,我考虑过了,但是有很多列比示例中显示的要多,所以我尝试在不必指定每个列的情况下执行此操作。添加的解决方案是一个非常糟糕的主意!它将检索id列两次。只是为了节省一点输入…Mysql确实返回两个id列。php代码没有处理这个场景,这是一些ORM的已知问题。无论如何,您都不应该在生产代码中使用select*来节省一点键入时间。使用别名。Mysql会返回两个id列。php代码没有处理这个场景,这是一些ORM的已知问题。无论如何,您都不应该在生产代码中使用select*来节省一点键入时间。使用别名。您好,我是新用户,请您帮助我设置相同的格式。因为我想写下投票,请尝试此操作,并将其放入数组结构中,请通过代码选择ux.*,uy.*修改相同的内容。来自用户_groupsHi,我是新用户,你能帮我格式化相同的内容吗?因为我想写下投票结果,请尝试这个方法,并通过代码从用户组中选择ux.*,uy.*来修改相同的内容