Tôi có hai bảng. Một cho người dùng và một cho bài đăng. Bảng người dùng có các lĩnh vực sau:PHP/MySQL: Bắt nhiều cột có cùng tên trong truy vấn tham gia không có bí danh?
id, username, password, created_at, modified_at
Bảng viết có các lĩnh vực sau:
id, user_id, title, body, created_at, modified_at
Khi tôi sử dụng một truy vấn như:
SELECT * FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id
Và lấy kết quả sử dụng PDO:
$sth = $this->$default_connection->prepare($query);
$sth->execute();
$sth->fetchAll(PDO::FETCH_ASSOC);
Mảng được trả về ghi đè tất cả các cột với tên giống như id, created_at, modified_at
như thế này:
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...
)
)
Các id
lĩnh vực cho người sử dụng không được hiển thị, thay vì ghi đè bởi id
của bưu điện. Tương tự cho các trường created_at & modified_at.
Tôi tin rằng tôi có thể giải quyết vấn đề này bằng cách sử dụng bí danh hoặc một cái gì đó như thế này:
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)
Hoặc một cái gì đó tương tự, nhưng tôi đã tự hỏi nếu có một cách để làm điều này mà không tự viết ra tên của mỗi cột đơn hoặc bí danh cho mỗi lần tôi muốn phân biệt giữa hai cột cùng tên? Có thể làm điều gì đó như:
SELECT users.* AS User and posts.* AS Post from `users` LEFT OUTER JOIN ON (User.id=Post.user_id)
Và có nó tự động sử dụng bí danh cho mỗi cột? Hoặc có cách nào khác nhanh hơn/thuận tiện hơn để thực hiện việc này không? Hoặc tôi có thể thực hiện việc này mà không phải tự định nghĩa bất kỳ bí danh nào không?
Cảm ơn bạn
Cảm ơn bạn đã trả lời của bạn! Tôi đã tự hỏi mặc dù có một cách để làm điều này mà không cần xác định bí danh? – randomphp
Tôi không chắc tại sao điều này được đánh dấu là câu trả lời được chấp nhận, nó cung cấp một giải pháp đã được đề cập trong câu hỏi, và câu hỏi đã được yêu cầu cụ thể cho một giải pháp _different_. Câu trả lời của Bill Karwin là hữu ích hơn nhiều. – Niall