Peter: Sql-Joins oder "Mache ich Sinn?"

Beitrag lesen

SELECT
a.uid as a_uid, a.name as a_name, a.eigenschaft1 as a_eigenschaft1 [... es folgen xx Eigenschaften ...],
b.uid as b_uid, b.name as b_name, b.eigenschaft1 as b_eigenschaft1 [... es folgen xy Eigenschaften ...],
c.uid as c_uid, c.name as c_name, c.eigenschaft1 as c_eigenschaft1 [... es folgen xz Eigenschaften ...],

Wozu du das machst wäre auch sinnvoll zu Wissen.

Ok, sagen wir "a" sei ein reales Produkt (mit verschiedenen Eigenschaften) aus einem Material "b" (ebenfalls mit x Eigenschaften) einer Firma "c" mit Adresse, Ansprechpartner etc.

Sowohl Produkt, Material als auch Firma sind in PHP als Objekte in entsprechenden Klassen modelliert. Diese Objekte lege ich (eben über generierte SQL-Statements) komplett in der Datenbank ab.

Nun gibt es ( zugegebenerweise selten ) Situationen, in denen ich anhand eines Produktes auch die anderen "anhängenden" Objekte aus der Datenbank ziehen will/muß. Das heißt, ich benötige alle Eigenschaften aller verknüpften Objekte, um diese in PHP erstellen zu können.

Genau das soll diese Anfrage ausdrücken... :)

FROM
TableA a, TableB b, TableC c
WHERE
a.buid = b.uid
AND
a.cuid = c.uid
AND
[... sonstige Bedingungen ...]

Das dürfte das langsamste sein was du machen kannst. Du hast hier ganz einfache join Bedingungen erstellst aber erst eine Kreuztabelle.

Ja, aber wenn einzelne Spalten gleiche Namen haben, zerfräst mir das doch wieder das Result oder? Zum Beispiel wird a.name durch b.name in den resultierenden Rows überschrieben, wenn ich diese nicht durch "AS" a_name etc. mit einem alias versehe...

Beispiel:

TableA:  uid | name | b_uid
TableB:  uid | name

SELECT * FROM TableA
INNER JOIN TableB ON TableA.b_uid = TableB.uid;

Die Anfrage wird zwar ausgeführt, aber im resultierenden Array ist in der Spalte 'name' eben der Name aus TableB. Der Name aus TableA existiert nicht mehr. Ich will beide.

Du brauchst hier nicht mehr als ein einfaches Beispiel, warum hast du es nicht umgesetzt?

Wenn mein Problem so einfach zu lösen ist, dann schubs mich bitte in die richtige Richtung... :) Ich sehs nich.