FinalFantasy Geschrieben 8. September 2007 Teilen Geschrieben 8. September 2007 Hi, ich habe folgendes Problem: Eine Tabelle a enthält 2 Referenzen auf Tabelle b, also muss ich b zweimal auf a joinen: SELECT a.*, b1.*, b2.* FROM a LEFT JOIN b AS b1 ON a.b1id = b1.id LEFT JOIN b AS b2 ON a.b2id = b2.id [/PHP] Als Ergebnis erhalte ich logischerweise eine Tabelle, die aber alle Spalten der Tabelle b doppelt enthält. Das ist ja auch so gewünscht, allerdings werte ich das Ergebnis in PHP aus und kann hier nichtmehr erkennen, welche Spalte von b1 stammt und welche von b2. Gibt es eine Möglichkeit, allen Spaltennamen von einer Tabelle ein Prefix in den Spaltennamen zu schreiben, ohne jedes Feld beim SELECT aufführen zu müssen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 8. September 2007 Teilen Geschrieben 8. September 2007 warum identifizierst Du sie nicht anhand der Reihenfolge in der die Spalten kommen? Wenn Dir das zu umständlich ist, dann kannst Du ja immer noch zwei getrennte Selects ausführen. Sag aber nicht dass dir das nicht gefällt, immerhin bist Du auch zu Faul den Wildcard durch Spaltennamen zu ersetzen, was ja mancherorts eh nicht als guter Stil anerkannt ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FinalFantasy Geschrieben 8. September 2007 Autor Teilen Geschrieben 8. September 2007 Anhand der Reihenfolge identifizieren geht nicht, da man die Ergebnisse in PHP als assoziatives Array kriegt... kommt so ein Fall vor, dass zwei Spalten den selben Namen haben, kommt PHP damit schon nicht zurecht, weil man dann zwei Werte zum gleichen Key hat. Die Wildcard durch jedes Feld austauschen will ich nicht, weil ich weiß, dass sich die Felder ändern können oder neue dazu kommen können. In dem realen Code muss ich ausserdem 4 mal joinen, nicht zweimal, a 16 Spalten pro Tabelle.... naja... abgesehen vom Index brauche ich sowieso jede Spalte. Hat also nichts mit Faulheit zu tun, sondern mit mangelnder Flexibilität. Ich hab das jetzt erstmal mit einem View gelöst, in dem ich wirklich alle Spaltennamen angegeben habe (soviel zur Faulheit), so gibt es wenigstens nur eine Stelle an der man im Fall der Fälle ändern muss. Aber es hätte ja sein können, dass es eine elegantere Lösung gibt, z.b. dass man Prefixe vergeben kann, oder sowas in der art. Wie meinst du 2 Selects? Für jeden Eintrag in a nochmal einen Select auf b machen? Dann käme ich bei einer Abfrage auf.... viele Selects. Falls du Subselects meinst, stellt sich das selbe Problem, dass ich jede Spalte aufführen muss, da ich sonst wieder die gleichen Spaltennamen mehrfach habe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 9. September 2007 Teilen Geschrieben 9. September 2007 Gibt es eine Möglichkeit, allen Spaltennamen von einer Tabelle ein Prefix in den Spaltennamen zu schreiben, ohne jedes Feld beim SELECT aufführen zu müssen? Zumindest nicht in einem mir bekannten DBMS. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 12. September 2007 Teilen Geschrieben 12. September 2007 Die Wildcard durch jedes Feld austauschen will ich nicht, weil ich weiß, dass sich die Felder ändern können oder neue dazu kommen können. Also in dem Fall würde ich mir eine Art "Meta"Tabelle machen in der ich speichere welche Felder ich abfragen möchte - und daraus dann das SQL Statement vom Programm generieren und dabei Präfixe verwenden lassen. Damit hast Du 1. die Hardcodierte Variante vermieden, 2. kein SELECT * und 3. bist immer noch flexibel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 12. September 2007 Teilen Geschrieben 12. September 2007 Hmm ob das Eingeben aller Felder in eine Metatabelle (die im übrigen ja sowieso schon existiert) und das Schreiben eines Generators schneller geht als das Statement einfach einmal zu tippen? Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 13. September 2007 Teilen Geschrieben 13. September 2007 wird in php nciht auch das b1.spaltenname geschireben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.