我有两个这样的表:
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'
]
]
答案 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;