MySQL: СОЕДИНИТЕ две таблицы с соответствующими именами строк

0

У меня есть две таблицы:

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'
    ]
]
  • 2
    Mysql возвращает оба столбца id. Это php-код, который не обрабатывает этот сценарий - известная проблема для некоторых ORM. В любом случае вы не должны использовать select * в рабочем коде, чтобы сэкономить немного времени на наборе текста. Используйте псевдонимы.
Теги:

3 ответа

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

Или попробуйте указать только поля идентификатора, например:

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
  • 0
    Спасибо, я подумала об этом, но столбцов гораздо больше, чем показано в примере, поэтому я пытаюсь сделать это без указания каждого из них.
  • 0
    Попробуйте мой отредактированный ответ
Показать ещё 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;
  • 0
    Привет, я новый пользователь, не могли бы вы помочь мне отформатировать то же самое.
  • 0
    он даже не принимает "*"
Показать ещё 1 комментарий
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;

Выход будет таким, как показано ниже. Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню