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.* 。。。不会从用户组表返回ID 如何修改此查询,以便将user_groups表中的所有列作为一个数组返回?结果如下: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.* 。。。不会从
[
'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.*来修改相同的内容