SQL Abfrage über 2 Tabellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • SQL Abfrage über 2 Tabellen

      Hallo Leute,

      Ich habe 2 Tabellen die folgendermaßen aufgebaut sind:

      Tabelle1:
      ID,Name, Jahr, Nummer

      Tabelle2:
      ID, FK_Tabelle1, Pfad ..

      Nun möchte ich eine PHP Funktion schreiben die mir nachher die Query als JSON ausgibt und zwar so das ich nachher alle Attribute von Tab1 habe und zusätzlich alle Pfade die dazu gehören.

      Also der Output sollte dann so aussehen:

      ID
      Name
      Jahr
      Nummer
      Pfade:
      Pfad1
      Pfad2

      habe schon folgendes ausprobiert:

      SQL-Abfrage

      1. SELECT *, Tabelle2.Path FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.FK_Tab1 AND Tabelle1.ID = 1;


      Aber dann bekomme ich als Output Tabelle1 Daten mit dem ersten PFad, einen 2. Datensatz mit dem 2. Pfad, etc.
      Every language has an optimization operator. In ObjC that operator is ‘//’.

      golbros.de
    • Du kannst nicht unterscheidlich viele Columns pro row als Rückgabewert bekommen. So funktioniert das nicht.
      Du kannst höchstens mit groud_concat und group by arbeiten
      Und SELECT * ist ein absolutes NoGo!

      Das Ergebnis müßte in etwa so aussehen:

      SQL-Abfrage

      1. SELECT `ID`,`Name`,`Jahr`,`Nummer`, group_concat(distinct Tabelle2.Pfad order by Tabelle2.Pfad asc separator ‘, ‘) as Pfade
      2. FROM Tabelle1
      3. LEFT JOIN Tabelle2 ON (Tabelle2.FK_Tabelle1=ID)
      4. GROUP BY Tabelle2.FK_Tabelle1


      Gruß

      Claus
      2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

      Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
    • nur noch ne kurze Anmerkung: GROUP_CONCAT hat ein Problem mit Spalten, die NULL enthalten, in dem Fall wird dann die gesamte Row ignoriert. (Tabelle2 endet oben ja mit ...) falls da noch weitere relevante Spalten sind.

      zum Query oben: 2. Zeile sollte der SEPARATOR falls nicht Komma in einfachen Anführungszeichen stehen, der vollständigkeithalber: in der 3. Zeile statt ID -> Tabelle1.ID schreiben, ansonsten meckert der Optimierer, weil er nicht weiß, welche Tabelle.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von entwickler ()

    • Okay danke für die Antworten. Habe es jetzt dann doch seperat gelöst. Also werden die Pfade zu den Bildern nur dann geladen wenn sie benötigt werden.

      Ich wollte eigentlich alle Daten beim Start der App laden. Da diese in einer lokalen Datenbank bzw. Web server liegen.

      Thallius schrieb:


      Und SELECT * ist ein absolutes NoGo!


      Kannst du mir sagen warum? Kenne in SQL nur die Basics.
      Every language has an optimization operator. In ObjC that operator is ‘//’.

      golbros.de
    • Fortrackz schrieb:

      Kannst du mir sagen warum? Kenne in SQL nur die Basics.


      Da gibt es sicher ein paar Gründe, die immer dann zutreffen, wenn Du nicht wirklich alle Spalten benötigst.
      Overhead -> Netzwerk und Speicher danken es Dir mit Geschwindigkeit und Stabilität
      Wenn sich die Datenbankstruktur ändert, wird sich eine nicht Wildcard-Abfrage bemerkbar machen.
      Der Optimierer kann dann sicher besser arbeiten.