У меня две таблицы. Один для пользователей и один для сообщений. Таблица пользователей имеет следующие поля:
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)
И автоматически ли он использует псевдонимы для каждого столбца? Или есть какой-нибудь другой более быстрый/более удобный способ сделать это? Или я могу это сделать без необходимости определять какие-либо псевдонимы?
Спасибо