PHP/MySQL: Immer Mehrere Spalten Mit Demselben Namen in der Join-Abfrage, Ohne die Aliase?
Ich habe zwei Tabellen. Eine für Benutzer und eine für Beiträge.
Die users Tabelle hat die folgenden Felder:
id, username, password, created_at, modified_at
Die posts-Tabelle hat die folgenden Felder:
id, user_id, title, body, created_at, modified_at
Wenn ich eine Abfrage wie:
SELECT * FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id
Und Holen sich die Ergebnisse mit PDO:
$sth = $this->$default_connection->prepare($query);
$sth->execute();
$sth->fetchAll(PDO::FETCH_ASSOC);
Das zurückgegebene array überschreibt alle Spalten mit dem gleichen Namen wie id, created_at, modified_at
wie diese:
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...
)
)
Den id
Feld für die Benutzer nicht angezeigt, stattdessen überschrieben id
von der post. Das gleiche gilt für die created_at & modified_at Felder.
Ich glaube ich kann dieses problem lösen, indem Sie entweder über alias oder so etwas wie dieses:
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)
Oder etwas ähnliches, aber ich Frage mich, ob es einen Weg gibt, dies zu tun, ohne manuell schreiben den Namen jedes einzelnen Spalte oder ein alias für jedes mal, wenn ich unterscheiden wollen zwischen zwei Spalten mit dem gleichen Namen?
Ist es möglich, etwas zu tun wie:
SELECT users.* AS User and posts.* AS Post from `users` LEFT OUTER JOIN ON (User.id=Post.user_id)
Und haben es automatisch Aliase für jede Spalte?
Oder gibt es irgendeine andere schneller/bequemer Weg, dies zu tun?
Oder kann ich dies tun ohne zu definieren Aliase mich?
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, alias perfekt ist in diesem Fall
Sparen Sie einige Zeit eingeben, benutzen Sie die Tabelle Aliase:
Der einzige Weg, dies zu tun, ohne definieren von Aliasen ist für das abrufen von Zeilen indiziert durch die Spalte position, anstatt über den Spaltennamen:
Könnten Sie auch die Arbeit verringern, um Aliase für Spalten von aliasing nur die Spalten, die Sie benötigen:
Aber, es ist generell eine schlechte Idee, verwenden Sie
SELECT *
im Produktions-code trotzdem. Sie don ' T müssen in der Regel alle die Spalten, nur so Holen diejenigen, die Sie tun müssen. Dies reduziert unnötige Verschwendung von Bandbreite, da Holen Sie die Ergebnisse.U die gleichen qualifizierten Namen nach mehrdeutige Felder (verwenden Sie tildas oder Kommas)