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

Beitrag lesen

Liebe Forumler und Forumlerinnen,

ich poste hier, weil ich einfach keine Informationen auf meine Fragen im Netz finde und ich hier immer sehr gut beraten worden bin.

Ich habe folgende Grundsatzfrage: Ich arbeite gerade an einem System in PHP, das einige komplexe Anfragen an eine MYSQL 4 (später vielleicht auch 5er) Datenbank absetzen soll. Dabei benötige ich Joins über diverse Table, wenn die gesicherten DatenObjekte in 1:1 Beziehungen stehen.

Bislang habe ich dazu meine SQL-Statements vom System generieren lassen, das klappte auch recht gut, führt aber dazu, daß die Statements wirklich extrem lang werden. Beispiel als Extremfall:

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 ...],
FROM
TableA a, TableB b, TableC c
WHERE
a.buid = b.uid
AND
a.cuid = c.uid
AND
[... sonstige Bedingungen ...]

Die Generierung dieser Statements ist manchmal hakelig, aber funktioniert. Danach kann ich aus dem jeweiligen Result meine Objekte kreieren.

Nun meine Fragen... :)

  1. Gibt es eine einfachere Möglichkeit, diverse gleich benannte Spalten ( wie zB 'uid' und 'name' im Beispiel ) in verschiedenen Tabellen in einem Query abzufragen? Also sowas wie "SELECT a.* as a_obj, b.* as b_obj" ?

  2. Würden mir hier irgendwelche (Left, Right, Outer, Inner) - Joins weiterhelfen? Kennt jemand gute Artikel zur Verwendung von SQL-Joins? Alles was ich finde sind recht einfache Beispiele, in denen zwei unterschiedliche Eigenschaften verglichen werden... das hilft mir irgendwie nicht.

  3. Hat jemand generell Ideen oder Tipps, wie ich solche komplexen Statements anders aufbauen könnte? Ich habe leider wenige direkte Ansprechpartner für solche Fragen, und ich bin nie so ganz sicher, ob dieser Ansatz nicht totaler Wahnsinn ist... :) und vielleicht einfacher gelöst werden könnte.

Vielen Dank für Eure Hilfe,

Peter