У меня есть две таблицы:
user_users
ID UserGroup Email
1 3 [email protected]
2 3 [email protected]
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' => '[email protected]',
'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
Или попробуйте указать только поля идентификатора, например:
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;
//Привет, это может помочь вам.
$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;
Выход будет таким, как показано ниже.