Abfrage aus 2 Tabellen

AndyBeck

Grünschnabel
Servus !

Will eine Abfrage aus 2 Tabellen machen und krieg das einfach nicht hin. Meine erste Abfrage aus nur einer Tabelle sah so aus:

$sql = "SELECT ID, FIRMA, NAME, EMAIL, HERKUNFT, BETREFF, RECHNUNGSNUMMER, KUNDENNUMMER, LIEFERSCHEINNUMMER, ARTIKELNUMMER, FEHLER, BILD1, BILD2, BILD3 FROM tabelle1 ORDER BY $sd LIMIT $start, $eintraege_pro_seite";

jetzt möchte ich aber noch den Status 'STAT' aus 'tabelle2' hinzufügen. Hab ich so gemacht:

// $sql = "SELECT ID, FIRMA, NAME, EMAIL, HERKUNFT, BETREFF, RECHNUNGSNUMMER, KUNDENNUMMER, LIEFERSCHEINNUMMER, ARTIKELNUMMER, FEHLER, BILD1, BILD2, BILD3, DATE, STAT FROM tabelle1, tabelle2 WHERE ID=DI ORDER BY DATE DESC, $sd LIMIT $start, $eintraege_pro_seite";

Als Ergebnis bekomme ich jetzt aber leider pro ID so viele Zeilen wie es zugehörige einträge in 'tabelle2' gibt. Ich möchte aber nur eine haben und zwar die neueste, welche ja schon durch das ORDER BY DATE DESC ganz oben steht.
Das krieg ich aber irgendwie nicht hin. Habe schon diverse Versuche mit GROUP BY oder DISTINCT unternommen, aber leider ohne Ergebnis.

Wer kann helfen? :rolleyes:
Danke
 
Ja das ist mein Join und "DI" ist eine Spalte in der 2.Tabelle welche in einer n zu 1 Beziehung zu ID steht.

Also viele DI mit verschiedenem Status zu einer ID.
Und ich will nur die DI Spalte mit dem neuesten Datum haben.
:rolleyes:
 
Hallo,

ok, dann versuch es mal nach dem Prinzip mit 2 korrelierten Subquerys, dafür aber ohne ORDER und GROUP BY (ungetestet)

SQL:
select t1.id,
       t1.name,
       t1.....,
       (select t2.state
          from tabelle2 t2
         where t1.id  = t2.di and
               t2.dat = (select MAX(dat)
                           from tabelle2 t3
                          where t3.di=t2.di)
       ) as state
  from tabelle1 t1

Markus
 
Alles klar das ging !
Erscheint mir aber irgendwie sehr kompliziert und komplex hehe, falls jemand noch ne elegantere Lösung weiß wäre ich dankbar, aber erstmal DANKE es funktioniert.
So sieht es jetzt aus!

$sql = "SELECT t1.ID, FIRMA, NAME, EMAIL, HERKUNFT, BETREFF, RECHNUNGSNUMMER, KUNDENNUMMER, LIEFERSCHEINNUMMER, ARTIKELNUMMER, FEHLER, BILD1, BILD2, BILD3, (SELECT STAT FROM status t2 WHERE t1.ID = t2.DI AND t2.DATE = (SELECT MAX(DATE)FROM status t3 WHERE t3.DI = t2.DI))AS STAT FROM $prod_language t1 ORDER BY $sd LIMIT $start, $eintraege_pro_seite";

:eek: brutal oder
 
Wenn man das ein bisschen schöner formatiert, Absätze und Einrückungen, dann sieht das gar nicht mehr so brutal aus, sondern wird sogar lesbar ;)

Und bitte noch auf "Erledigt" klicken, danke.
 

Neue Beiträge

Zurück