私は2つのテーブルを持っています。1 つはユーザー用、もう 1 つは投稿用です。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)
または似たようなものですが、同じ名前の2つの列を区別したいたびに、すべての列の名前またはエイリアスを手動で書き出さずにこれを行う方法があるかどうか疑問に思っていましたか? 次のようなことは可能ですか:
SELECT users.* AS User and posts.* AS Post from `users` LEFT OUTER JOIN ON (User.id=Post.user_id)
そして、すべての列に自動的にエイリアスを使用しますか? または、これを行うための他のより高速で便利な方法はありますか? または、エイリアスを自分で定義せずにこれを行うことはできますか?
ありがとうございました