Ho due tavoli. Uno per utenti e uno per post. La tabella utenti ha i seguenti campi:PHP/MySQL: ottenere più colonne con lo stesso nome nella query di join senza alias?
id, username, password, created_at, modified_at
La tabella messaggi ha i seguenti campi:
id, user_id, title, body, created_at, modified_at
Quando uso una query come:
SELECT * FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id
a prendere i risultati utilizzando DOP:
$sth = $this->$default_connection->prepare($query);
$sth->execute();
$sth->fetchAll(PDO::FETCH_ASSOC);
La matrice restituita sovrascrive tutte le colonne con gli stessi nomi come id, created_at, modified_at
simili:
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...
)
)
Il campo id
per l'utente non è mostrato, invece sovrascritti dal id
del post. Lo stesso vale per i campi created_at & modified_at.
credo posso risolvere questo problema sia usando pseudonimi o qualcosa di simile a questo:
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)
o qualcosa di simile, ma mi chiedevo se ci fosse un modo per farlo senza scrivere manualmente il nome di ogni singola colonna o un alias per ogni volta che voglio distinguere tra due colonne con lo stesso nome? E 'possibile fare qualcosa di simile:
SELECT users.* AS User and posts.* AS Post from `users` LEFT OUTER JOIN ON (User.id=Post.user_id)
e farlo utilizzare automaticamente gli alias per ogni colonna? Oppure c'è un altro modo più veloce/più conveniente per farlo? Oppure posso farlo senza dover definire alcun alias da solo?
Grazie
Grazie per la tua risposta! Mi stavo chiedendo però se ci fosse un modo per farlo senza definire alias? – randomphp
Non sono sicuro del motivo per cui questo è contrassegnato come risposta accettata, offre una soluzione che è già stata menzionata nella domanda e la domanda chiedeva specificamente una soluzione _differente_. La risposta di Bill Karwin è molto più utile. – Niall