Joins

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von erlprinz, 10.07.2008.

  1. #1 erlprinz, 10.07.2008
    erlprinz

    erlprinz Grünschnabel

    Dabei seit:
    10.07.2008
    Beiträge:
    2
    Zustimmungen:
    0
    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_idpage_content FROM page_parentpages 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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 10.07.2008
    Zuletzt bearbeitet: 10.07.2008
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    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...........
     
  4. #3 sim4000, 10.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Ich hab mir mal hier einen Spickzettel zum Thema Joins gemacht. Ist im Anhang.
     

    Anhänge:

    • joins.pdf
      Dateigröße:
      156,5 KB
      Aufrufe:
      17
  5. #4 madfool, 10.07.2008
    madfool

    madfool Tripel-As

    Dabei seit:
    12.08.2004
    Beiträge:
    192
    Zustimmungen:
    0
  6. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    geau das sollte das die lösung sein
     
  7. #6 sim4000, 11.07.2008
    Zuletzt bearbeitet: 11.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    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.
     
  8. karru

    karru OSX'ler

    Dabei seit:
    02.05.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Afaik ist das nur die alte Schreibweise und entspricht einem LEFT INNER JOIN.

    MfG
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 sim4000, 11.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    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.
     
  11. #9 erlprinz, 20.07.2008
    erlprinz

    erlprinz Grünschnabel

    Dabei seit:
    10.07.2008
    Beiträge:
    2
    Zustimmungen:
    0
    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
     
Thema:

Joins

Die Seite wird geladen...

Joins - Ähnliche Themen

  1. Werte ermitteln über Joins

    Werte ermitteln über Joins: Hi Kumpel hat mir den Fehler bitte löschen war in der Formatierung vom Join Gruß Dekker