gpt4 book ai didi

PHP/MySQL : Getting Multiple Columns With the Same Name in Join Query Without Aliases?

转载 作者:IT老高 更新时间:2023-10-29 00:12:05 25 4
gpt4 key购买 nike

我有两张 table 。一个用于用户,一个用于帖子。用户表有以下字段:

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)

它是否自动为每一列使用别名?或者有没有其他更快/更方便的方法来做到这一点?或者我可以做到这一点而不必自己定义任何别名吗?

谢谢

最佳答案

在不定义别名的情况下执行此操作的唯一方法是获取按列位置而不是按列名索引的行:

$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 * 通常被认为是个坏主意。您通常不需要所有列,因此只需获取您确实需要的那些。这可以减少您获取结果时不必要的带宽浪费。

关于PHP/MySQL : Getting Multiple Columns With the Same Name in Join Query Without Aliases?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17715049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com