tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
407
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cäptin Pommes Cäptin Pommes ist offline Mitglied Gold
    Registriert seit
    Oct 2009
    Beiträge
    123
    hi,

    ich hab folgendes problem:

    Ich hab ne Tabelle Produzenten und eine Tabelle Bilder.
    Nun müssen jedem Produzenten seine Bilder zugeordnet werden, so wie ich rausgefunden habe benutzt man dafür eine 3te Tabelle Produzenten_Bilder, wo dann die jeweiligen id´s zusammen stehn ... Jedoch weiss ich nich so recht wie ich dann alle Bilder von einem bestimmten Produzenten raussuchen kann ... nach meinen infos soll das wohl LEFT JOIN klappen ... aber ich werd da nich so ganz schlau drauß ... auch die mysql doku hat mir nich weiter geholfen

    kann mir da einer bei dem mysql befehl helfen?
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Gehört ein Bild immer zu genau einem Produzenten? Dann brauchst du keine dritte Tabelle, sondern die Tabelle "Bilder" bekommt eine Spalte "Produzent_id"
     

  3. #3
    Cäptin Pommes Cäptin Pommes ist offline Mitglied Gold
    Registriert seit
    Oct 2009
    Beiträge
    123
    ähm nein, ein bild kann auch mehrere Produzenten haben
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ok, weil du geschrieben hast "Nun müssen jedem Produzenten seine Bilder zugeordnet werden". Das klang so, als wäre es 1:N


    Tabellen:

    Produzenten
    id | name

    Bilder
    id | pfad

    Produzenten_Bilder
    Produzent_id | Bild_id


    Alle Bilder für Produzent "1337"

    Code sql:
    1
    2
    3
    
    SELECT          b.pfad
    FROM            Bilder AS b
    JOIN            (Produzenten_Bilder AS pb) ON (pb.Produzent_id = 1337 AND pb.Bild_id = b.id)
     

  5. #5
    Cäptin Pommes Cäptin Pommes ist offline Mitglied Gold
    Registriert seit
    Oct 2009
    Beiträge
    123
    ah ok danke
    kannst du mir die 3te zeile kurz erläutern? damit ich auch verstehe was da passiert
     

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Die einfachste Art sich einen JOIN vorzustellen, ist das Kreuzprodukt (auch wenn es intern anders abläuft).

    Also stell dir vor jede Zeile von Tabelle "Bilder" wird mit jeder Zeile in Tabelle "Produzenten_Bilder" zu einer Zeile vereinigt (join) und anschließend werden die Zeilen anhand der angegebenen Bedingung gefiltert.


    Hast du z.B. folgende Beispiel Werte

    Bilder:
    id | pfad
    1 | foo.jpg
    2 | bar.jpg
    3 | baz.jpg

    Produzenten_Bilder
    Produzent_id | Bild_id
    43 | 1
    1337 | 1
    1337 | 3


    Entsteht folgendes Kreuzprodukt
    Bilder.id | Bilder.pfad | Produzenten_Bilder.Produzent_id | Produzenten_Bilder.Bild_id
    1 | foo.jpg | 43 | 1
    1 | foo.jpg | 1337 | 1
    1 | foo.jpg | 1337 | 3
    2 | bar.jpg | 43 | 1
    2 | bar.jpg | 1337 | 1
    2 | bar.jpg | 1337 | 3
    3 | baz.jpg | 43 | 1
    3 | baz.jpg | 1337 | 1
    3 | baz.jpg | 1337 | 3


    Jetzt werden alle Zeilen durchlaufen und auf die Bedingung geprüft (pb.Produzent_id = 1337 AND )


    Also bleibt das hier übrig

    Bilder.id | Bilder.pfad | Produzenten_Bilder.Produzent_id | Produzenten_Bilder.Bild_id
    1 | foo.jpg | 43 | 1
    1 | foo.jpg | 1337 | 1
    1 | foo.jpg | 1337 | 3
    2 | bar.jpg | 43 | 1
    2 | bar.jpg | 1337 | 1
    2 | bar.jpg | 1337 | 3
    3 | baz.jpg | 43 | 1
    3 | baz.jpg | 1337 | 1
    3 | baz.jpg | 1337 | 3

    Und das sind genau die beiden Bilder von Produzent 1337.



    In Realität ist ein Kreuzprodukt viel zu aufwändig, aber jeder JOIN lässt sich immer auch so abbilden und verstehen.


    Edit: Und bei einem LEFT JOIN (der hier nicht verwendet wurde), würden alle Zeilen von Tabelle "Bilder" auf jeden Fall vorkommen, auch wenn es keine Verbindung zu Produzenten_Bilder gibt. In unserem Beispiel hat aber jedes Bild auch einen Produzenten, also wäre das Ergebnis identisch. Mit einem LEFT JOIN ließen sich z.B. alle Produzenten finden, die keine Bilder haben.
    Geändert von CPoly (15.01.12 um 17:55 Uhr)
     

  7. #7
    Cäptin Pommes Cäptin Pommes ist offline Mitglied Gold
    Registriert seit
    Oct 2009
    Beiträge
    123
    ahhja ok ...

    und wenn ich alle Produzenten des bilds 5 haben will müsste das so aussehn oda?

    Code sql:
    1
    2
    3
    
    SELECT          p.name
    FROM            Produzent AS p
    JOIN            (Produzenten_Bilder AS pb) ON (pb.Bild_id = 5 AND pb.Produzenten_id = p.id)
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ja, sollte so richtig sein.
     

Ähnliche Themen

  1. [MySQL] LEFT JOIN-Fehler
    Von ComFreek im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 08.01.11, 15:22
  2. mysql LEFT OUTER JOIN?
    Von wachteldonk im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 03.07.08, 10:06
  3. [MySql] Problem mit LEFT JOIN
    Von d-Stench im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 27.07.06, 22:34
  4. [MySQL] zwei LEFT JOIN
    Von sasuki im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 10.05.04, 21:21
  5. [MySQL] zwei LEFT JOIN
    Von sasuki im Forum PHP
    Antworten: 0
    Letzter Beitrag: 08.05.04, 20:10