Anzeige:
Ergebnis 1 bis 7 von 7

Thema: MySQL: Tabellen verknüpfen.

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39

    MySQL: Tabellen verknüpfen.

    Hallo,
    ich habe mich schon "wund" gegoogelt aber ich werde einfach nicht schlauer.
    Und zwar folgendes Problem. Ich programmiere grade eine Webpage (PHP5) für einen eSport-Clan und habe 2 Tabellen die verknüpft werden müssen.
    Dazu muss ich noch sagen das ist MySQL-Neuling bin.

    Die eine Tabelle sieht so aus:
    Code:
    Tabellenname: member
    ID  |  nickname  |  pb  |  tracker  |  memberrankID
    -----------------------------------------------
    1   |  olly      |  34  |  0815     |  1
    2   |  Werner    |  33  |  0815     |  2
    usw.
    Die zweite Tabelle so:
    Code:
    Tabellenname: memberrank
    ID  |  rank
    ------------------
    1   |  leader
    2   |  squadleader
    
    usw.
    Jetzt möcht ich die Tabellen verknüpfen.
    Und zwar so -> Wenn ich eine Abfrage von Tabelle "member" mache, soll in der memberrankID gleich der passende inhalt von Tabelle memberrank stehen.
    Sprich so:
    Code:
    ID = 1
    nickname = olly
    pd = 34
    tracker = 0815
    memberrankID = leader
    und nicht
    Code:
    ID = 1
    nickname = olly
    pd = 34
    tracker = 0815
    memberrankID = 1
    Ich weiß das ich beide Tabellen Selektieren muß. Und dann komme ich leider nicht weiter.
    (Da gibt es auch noch ein JOIN-Befehl aber aus dem werde ich nicht schlau bzw. hab das mit den JOIN nicht verstanden.)
    Also mein SELECT sieht jetzt schon mal so aus:
    Code:
    SELECT * FROM member, memberrank ORDER BY nickname ASC
    Vielleicht kann mir ja einer helfen.

    Gruß Olly

  2. #2
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    hier brauchst du einen einfachen join:
    Code:
    select member.id, member.nickname, member.pb, member.tracker,
        memberrank.rank
    from member
        join memberrank on member.rank = memberrank.id
    order by member.nickname;
    Das sollte auch bei MySQL gehen.
    Das Ziel ist das Ziel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    Okay, will das gleich mal ausprobieren.
    Kannst du mir das mit dem join mal genauer erklären oder kennst du eine Seite wo das gut erklärt wird? (auch für "dummis")

    thx

    Edit:

    Juhu es klappt, danke.
    mein SELECT sieht jetzt so aus:
    Code:
    "SELECT member.ID, member.nickname, member.pbID, member.trackerID, memberrank.rank 
    FROM  member JOIN memberrank ON member.memberrankID = memberrank.ID 
    ORDER BY member.nickname"
    Hatte beim ersten Post die "ID" nach "pb" und "tracker" weggelassen. Weil die ID nichts mit der Datenbank zu tun hat. Damit man es besser lesen kann. So und jetzt werde ich mich mal auf dem Weg machen und weiter suchen, ich will ja aus kappieren warum es jetzt so klappt.
    Geändert von djaliced (28-05-2006 um 16:32 Uhr)

  4. #4
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Nun, mal ganz kurz und ungenau:

    Nehmen wir mal zwei einfache Tabellen an:
    tabA mit id(serial),Name(varchar),Funktion(int mit Fremdschlüssel auf tabB)
    tabB mit id(serial), Funktion

    Ein join verbindet zwei Tabellen. Die resultierende Tabelle hat alle Spalten der beteiligten Tabellen.

    Gibt man kein Kriterium an, nach dem die Tabellen verknüpft werden sollen, so wird jede Zeile der zweiten mit jeder Zeile der ersten Tabelle verknüpft. wenn z.B. beide Tabellen 10 Zeilen haben, so kriegt man 100 Zeilen als Ergebnis.
    Gibt man ein Kriterium an, so werden alle Zeilen geholt, die dem Kriterium entsprechen.

    jetzt kann es natürlich passieren, dass es in tabA in einigen Zeilen keinen Verweis auf tabB gibt, z.B. weil noch keine Funktion vergeben ist und also
    im feld tabA.funktion null steht. Diese Zeilen würde ich so nicht sehen. Wenn ich sie haben will, muss ich einen sog. outer join verwenden, in diesem Falle reicht
    left join tabB on...


    Die Datenbank macht übrigens auch einen join, wenn du sagst

    1) select * from tabA,tabB where tabA.funktion = tabB.id

    das liefert dir die selben Ergebnisse wie

    2) select * from tabA join tabB on tabA.funktion = tabB.id.

    allerdings solltest du dir angewöhnen, einen join immer auch als join zu schreiben. Das ist syntaktisch sauberer und hält dir die where-Klausel frei.
    Nimm also die 2. Form.

    Als Buchtipp hätte ich "SQL für Dummies".
    Das Ziel ist das Ziel.

  5. #5
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    ...so langsam kommt die Erleuchtung
    ich will den SELECT hier auch noch mal auseinander nehmen, um zu sehen ob ich das jetzt richtig verstanden habe. (in kurzfassung)
    Code:
    "SELECT member.ID, 
            member.trackerID, 
            memberrank.rank      {<- Die Spaltennamen die selektiert werden sollen}
    
    FROM member JOIN memberrank  {<- member ist die "Haupttabelle" und memberrank 
                                     ist die Tabelle die in member eingefügt 
                                     (verknüpft) werden soll.}
    
    ON member.memberrankID = memberrank.ID" {<- hier steht wie veknüpft werden soll.
                                               "nehme den Datensatz aus memberrank 
                                               mit der ID die in memner.memberrankID 
                                               steht"}
    Ich hoffe mal das ist so einigermaßen richtig.
    Ich glaube mit drei Tabellen wird es wohl so ähnlich funktionieren.
    Ich werde morgen im besitz eines neuen Büchlein sein
    Und nochmals danke für die gute Erklärung und den Buchtip.

    P.S.: LEFT JOIN und RIGHT JOIN hab ich geschnallt.

  6. #6
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Zitat Zitat von djaliced
    Ich hoffe mal das ist so einigermaßen richtig.
    Jo, passt.
    Das Ziel ist das Ziel.

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    Sorry, aber ich muß hier nochmal rumschleimen
    Also das mit dem JOIN klappt echt wunderbar. Ich habe jetzt 4 Tabellen miteinander verknüpft und es läuft auf anhieb.
    Code:
    (((Tabelle1 & Tabelle2)-nach-> Tabelle 3)-nach-> Tabelle4)
    Danke nochmal

    Gruß Olly

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •