PHP / MySQL: получение нескольких столбцов с одинаковым именем в объединении запросов без псевдонимов?

У меня две таблицы. Один для пользователей и один для сообщений. Таблица пользователей имеет следующие поля:

id, username, password, created_at, modified_at 

Таблица сообщений имеет следующие поля:

 id, user_id, title, body, created_at, modified_at 

Когда я использую запрос, например:

 SELECT * FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id 

И получить результаты с помощью PDO:

 $sth = $this->$default_connection->prepare($query); $sth->execute(); $sth->fetchAll(PDO::FETCH_ASSOC); 

Возвращаемый массив перезаписывает все столбцы с такими же именами, как id, created_at, modified_at следующим образом:

  Array ( [0] => Array ( [id] => 1 [username] => johnSmith [password] => 2348r7edf8s79aa0230 [created_at] => 0000-00-00 00:00:00 [modified_at] => 0000-00-00 00:00:00 [user_id] => 18 [title] => First Post [body] => Just testing... ) ) 

Поле id для пользователя не отображается, вместо этого оно заменяется id сообщения. То же самое касается полей created_at & modified_at.

Я считаю, что я могу решить эту проблему, используя либо псевдонимы, либо что-то вроде этого:

  SELECT users.id, users.username, users.password, users.created_at, users.modified_at, posts.id AS postId, posts.user_id, posts.title, posts.created_at AS postCreatedAt, posts.modified_at AS postModifiedAt FROM `users` LEFT OUTER JOIN `posts` ON (users.id=postId) 

Или что-то подобное, но мне было интересно, есть ли способ сделать это, не вручную выписывая имя каждого отдельного столбца или псевдонима для каждого раза, когда я хочу различать два столбца с тем же именем? Можно ли сделать что-то вроде:

 SELECT users.* AS User and posts.* AS Post from `users` LEFT OUTER JOIN ON (User.id=Post.user_id) 

И автоматически ли он использует псевдонимы для каждого столбца? Или есть какой-нибудь другой более быстрый / более удобный способ сделать это? Или я могу это сделать без необходимости определять какие-либо псевдонимы?

спасибо

Я думаю, что псевдоним в этом случае идеален

 SELECT table1.column AS column1, table2.column AS column2 FROM table1 LEFT JOIN table2 ON table1.column = table2.column 

Чтобы сэкономить время ввода, используйте псевдонимы таблиц:

 SELECT t1.column AS column1, t2.column AS column2 FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.column = t2.column 

Единственный способ сделать это без определения псевдонимов – выбор строк, индексированных по столбцам, вместо имени столбца:

 $sth->fetchAll(PDO::FETCH_NUM); 

Вы могли бы также уменьшить работу в столбцах псевдонимов, наложив только те столбцы, которые в ней нуждаются:

 SELECT *, posts.created_at AS postCreatedAt, posts.updated_at AS postUpdatedAt FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id 

Однако, как правило, считается неправильной идеей использовать SELECT * в производственном коде. Обычно вам не нужны все столбцы, поэтому просто загружайте те, которые вам нужны. Это уменьшает ненужную трату полосы пропускания при получении результатов.

U может добавлять такое же квалифицированное имя после неоднозначных полей (использовать тильды или запятые)

 SELECT users.id `users.id`, ... posts.id `posts.id`, ... FROM `users` LEFT OUTER JOIN `posts` ON (users.id=posts.id)