Andreas Korthaus: "standard-konformes" SQL für DB-Abstraktion

Beitrag lesen

Hi Philipp!

Das heißt ich merke hinterher gar nicht mehr welches Feld aus welcher Tabelle kommt.

Ja...? - Das ist auch richtig so, denn jeder Query gibt dir eine ResultSet zurück,
was ebenfalls wider eine Tabelle ist. Der Query ist nur eine Abbildungsvorschrift und
es ist streng genommen nur ein "Spezialfall", wenn ein Feld auch äquivalent in der
Ergebnisrelation abgebildet wird. Eine Zuordnung zu einer früheren Bezeichnung ist
eigentlich falsch (obwohl eigentlich manchmal, wie bei dir jetzt, wünschenswert).

Ich will gar nicht auf die Tabelle schließen. Mir geht es erstmal um die Query und dessen Auswertung an sich.

Ich zeige mal was ich z.B. mache(PHP+PEAR):

$sql = "
        SELECT
          *
        FROM
          ".DB_PREFIX."events as events
        LEFT JOIN
          ".DB_PREFIX."event_types as types
        ON events.event_typ = types.event_typ_id
        WHERE
          events.group_id = '".$user->getVar('group_id')."'
        ";

print_r($db->getAll($sql));

Jetzt bekomem ich z.B. so einen Array:

array(
    '1' => array(
             'id' = 123,
             'name' = andreas,
             'typ' = a
           )
    '2' => array(
             'id' = 456,
             'name' = philipp,
             'typ' = b
           )
)

Hierbei stammt z.B. 'id' aus Tabelle 'events' und 'typ'aus der Tabelle 'event_types'.

Genau das ist es was ich haben will, denn so kann ich das ganze sehr schön an ein Template übergeben und dort einfach ausgeben.

Aber kann das jede DB so machen?

Was sicher funktioniert ist:

SELECT
          events.id as id,
          events.name as name,
          types.typ
        FROM
          ".DB_PREFIX."events as events
        LEFT JOIN
          ".DB_PREFIX."event_types as types
        ON events.event_typ = types.event_typ_id
        WHERE
          events.group_id = '".$user->getVar('group_id')."'
        ";

Nur ist das bei mir noch ne Ecke komplexer, daher würde ich gerne da drauf verzichten. Die Frage ist halt, wenn ich mehr als eine Tabelle in der Abfrage verwende, muss ich dann alle Felder einzelnd mit einem Alias versehen, damit sie auch z.B. in PostgreSQL korrekt (in Form eines solchen Array wie oben) ausgegeben werden können? Und was wenn ich nur einen gleichen Feldnamen in 2 Tabelen habe, dann geht es wohl nicht anders, oder?

Viele Grüße
Andreas