Joins

E

erlprinz

Grünschnabel
Hallo Leute,

ich brauche hilfe bei einer Tabellenverknüpfung. Den Trick mit den Joins habe ich noch nicht ganz verstanden.

Ich habe folgende zwei Tabellen:

pages:
page_id | page_type | page_position | page_content | page_publish

page_parent
ppar_id | ppar_parent | ppar_child

ich möchte nun alle ppar_childs (und deren dazugehörigen inhalt) auslesen, deren ppar_parent der variable $page_id im script, den status 'published' haben und vom seitentyp 'part' sind, gereiht nach der page_position

mein query lautet bisher so:
PHP:
SELECT DISTINCT page_id, page_content FROM page_parent, pages WHERE ppar_parent='$page_id' AND page_publish='1' AND page_type='part' ORDER BY page_position

bisher erhalte ich aber jedes mal, wenn die $page_id in der tabelle page_parents als ppar_parent eingetragen ist, alle seiten, die 'part' und 'published' sind, ausgeworfen

mit den joins habe ich jetzt schon einige stunden herumrecherchiert und experimentiert, ganz geschnallt hab ich das leider noch nicht. bitte um hilfe

lg,

der erlprinz
 
In deiner Query fehlt noch die Verknüpfung der beiden Tabellen, deshalb kriegst du mehr als du willst ausgeworfen.

Du kannst nun explizit joins benutzen oder implizit.

Dafür müsste man aber wissen, wie deine beiden Tabellen verknüpft sind, sprich wir brauchen von dir die Info was deine Primär-Schlüssel sind und was die Fremdschlüssel.

Schnellschuß + ungetestet:

Ich vermute mal, das page_parent.ppar_parent auf pages.page_id zeigt, richtig?

Wenn ja, müsstest du der Query noch ein

AND pages.page_id='$page_id'

hinzufügst.

Wobei dann nicht klar ist, wofür du page_parent.ppar_parent überhaupt noch brauchst...........
 
Zuletzt bearbeitet:
Ich hab mir mal hier einen Spickzettel zum Thema Joins gemacht. Ist im Anhang.
 

Anhänge

  • joins.pdf
    156,5 KB · Aufrufe: 17
In deiner Query fehlt noch die Verknüpfung der beiden Tabellen, deshalb kriegst du mehr als du willst ausgeworfen.

Du kannst nun explizit joins benutzen oder implizit.

Dafür müsste man aber wissen, wie deine beiden Tabellen verknüpft sind, sprich wir brauchen von dir die Info was deine Primär-Schlüssel sind und was die Fremdschlüssel.

Schnellschuß + ungetestet:

Ich vermute mal, das page_parent.ppar_parent auf pages.page_id zeigt, richtig?

Wenn ja, müsstest du der Query noch ein

AND pages.page_id='$page_id'

hinzufügst.

Wobei dann nicht klar ist, wofür du page_parent.ppar_parent überhaupt noch brauchst...........

geau das sollte das die lösung sein
 
geau das sollte das die lösung sein

Es handelt sich dabei aber wie supersucker schon sagte nicht um einen "echten" Join.
Wenn Du einen richtigen Join nutzen willst, brauchst du dafür einen innerJoin.

Wie der funzt, ist ja auf meinem Spickzettel beschrieben.
 
Zuletzt bearbeitet:
Es handelt sich dabei aber wie supersucker schon sagte nicht um einen "echten" Join.
Wenn Du einen richtigen Join nutzen willst, brauchst du dafür einen innerJoin.

Wie der funzt, ist ja auf meinem Spickzettel beschrieben.

Afaik ist das nur die alte Schreibweise und entspricht einem LEFT INNER JOIN.

MfG
 
Afaik ist das nur die alte Schreibweise und entspricht einem LEFT INNER JOIN.

MfG

Genau.
Der inner join wurde mal entwickelt, um Ressoucen zu Sparen. Bei alten SQL Servern ging ein inner join schneller als ein Equi join.
Aber alle neuern Server nutzen schon seit langem automatisch den inner join, wenn sie eine Tabellen Verknüpfung erkennen.

Ist also egal, ob man nun das von supersucker, oder einen innner join nutzt.
Allerdings ist ein inner join übersichtlicher. So bleiben die Tabellen Verknüpfungen aus der where clause raus. Und es sind dort dann nur noch Bedingungen um Datensätze zu filtern.
 
Hallo Leute,

vielen dank für die tolle Hilfe. Ich hatte es zwar noch immer nicht ganz gecheckt mit dem Zettel und wieder verschiedene Varianten ausprobiert, ich brauch da leider immer irgendwie eine richtige Version, um verstehen zu können, was da abgeht : (

Ich glaube daß es bei meinen ersten Join-Versuchen wohl am ehesten an der syntax gelegen ist, daß ich es nie hinbekommen habe, ich glaub, die habe ich mit diesem 'LEFT JOIN' 'ON' usw. eingangs auch irgendwie 'verhunzt' gehabt.

Die funktionierende Lösung sieht jetzt jedenfalls so aus:

SELECT page_content, page_id FROM pages LEFT JOIN page_parent ON ppar_child=page_id WHERE ppar_parent='$page_id' AND page_publish='1' AND page_type='gallery' ORDER BY page_position

nochmals vielen dank für Eure hilfe. Bin übrigens begeistert von der netten Unterstützung hier

lg,

der erlprinz
 

Ähnliche Themen

dovecot und postfix Konfiguration Problem

(AufAbwegen) - MSSQL Server Statement - Syntax

PostgreSQL und Spaltenalias

skript aus der kommandozeile starten

Daten aus Feld weiterverarbeiten

Zurück
Oben