Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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.

  • Autor

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.

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 :)

wird in php nciht auch das b1.spaltenname geschireben?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.