【发布时间】:2026-02-16 15:45:01
【问题描述】:
我有两张桌子。一个用于用户,一个用于帖子。 users 表有以下字段:
id, username, password, created_at, modified_at
posts 表有以下字段:
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)
让它自动为每一列使用别名? 或者有没有其他更快/更方便的方法来做到这一点? 或者我可以这样做而无需自己定义任何别名吗?
谢谢
【问题讨论】:
标签: php mysql join pdo duplicates