MySQL - Abfrage über mehrere Tabellen

  1. BalkonSurfer

    BalkonSurfer Thread StarterMacUser Mitglied

    Mitglied seit:
    27.07.2003
    Beiträge:
    5.157
    Zustimmungen:
    1
    Hi,
    ich habe ein Problem mit einer Abfrage:

    Tabelle1:
    id,name,inhaltid
    1,müller,1
    2,schmidt,2

    Tabelle2:
    id,inhalt
    1,12345
    2,54321

    Und bei einer Abfrage "Select id, name, inhaltid from Tabelle1" hätte ich gern anstatt die inhaltid den Inhalt aus Tabelle2.

    Also mein gewünschtes Ergebniss wäre dann:
    1,müller,12345
    2,schmidt,54321


    Jetzt kann ich ja mit jeder Rückgabezeile aus Tabelle1 eine neue Abfrage für Tabelle2 stellen, aber das ist wahrscheinlich nicht zu empfehlen.

    Wie mache ich das?

    Danke und Gruß
     
    BalkonSurfer, 29.04.2006
  2. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.170
    Zustimmungen:
    3.887
    SELECT id,name,inhalt FROM Tabelle1, Tabelle2
     
    oneOeight, 29.04.2006
  3. Darkstar

    DarkstarMacUser Mitglied

    Mitglied seit:
    17.07.2004
    Beiträge:
    160
    Zustimmungen:
    0
    PHP:
    $query "SELECT * FROM
      tabelle1 as t1
    INNER JOIN 
      tabelle2 as t2 ON (t1.inhaltid = t2.id)
    WHERE
      ...
    ORDER BY
     ..."
    ;
    Das sollte helfen
     
    Darkstar, 29.04.2006
  4. BalkonSurfer

    BalkonSurfer Thread StarterMacUser Mitglied

    Mitglied seit:
    27.07.2003
    Beiträge:
    5.157
    Zustimmungen:
    1
    Danke!
    Endlich habe ich auch den Sinn von Join kapiert ;)
     
    BalkonSurfer, 29.04.2006
  5. master_p

    master_pMacUser Mitglied

    Mitglied seit:
    31.01.2005
    Beiträge:
    1.063
    Zustimmungen:
    23
    Braucht man gar nicht ganz so kompliziert machen mit dem benennen der Tabellen etc. Ein einfaches:

    PHP:
    $query "
    SELECT * FROM
     tabelle1
    LEFT JOIN tabelle2 ON tabelle2.id=tabelle1.inhaltid
    WHERE
      ...
    ORDER BY
     ..."
    ;
    reicht aus.

    Evtl. solltest Du Dir aber mal Gedanken zu Deinen Feldernamen machen, weil es bei einer solchen Bezeichnung recht schnell unübersichtlich wird und man bei einer anderen Bezeichnung die "tabelleXY." weglassen kann.

    Beispiel:
    Tabelle1 (personen)
    pers_id
    pers_name
    pers_inh_id

    Tabelle2 (inhalte)
    inh_id
    inh_inhalt

    Wenn man es so macht, dann kann man den Query nochmal verkürzen auf:
    PHP:
    SELECT FROM
     personen
    LEFT JOIN inhalte ON inh_id
    =pers_inh_id
    WHERE
    ... 
    ORDER BY ...
     
    master_p, 29.04.2006
  6. Paelmchen

    PaelmchenMacUser Mitglied

    Mitglied seit:
    19.08.2005
    Beiträge:
    574
    Zustimmungen:
    27
    Hi,

    nur mal so reingeschmissen. In Deiner Struktur möchte ich Dir nur mal einen Hinweis gehen. Willst Du die typische Adressen- Kontaktgeschichte abdecken!? Dann solltest Du gleich darüber nachdenken, daß eine Person mehrer Adressen haben kann und zwischen die beiden Tabelle eine sogeannte Bewegtabelle schalten, die einzig die beiden Schlüssel aus beiden Tabellen führt. So bist Du für die Zukunft abgesichert und mußt nicht für den Selben Kontakt zwei Kontaktsätze anlegen, um z.B. berufliche Adresse und private Adresse in den Daten zu haben.

    Kontakt:
    1,mueller
    2,meier

    Adresse:
    10,beruflich,werkstraße
    20,privat,feriendorf
    30,privat,hupfdudel

    Bewegtabelle:
    1,10
    1,20
    2,30

    Also hat hier mueller zwei Adressen und meier eine.

    Bye
    Mirko
    PS: Sollte ich am Thema komplett vorbei sein - einfach ignorieren :D
     
    Paelmchen, 29.04.2006
  7. Jakob

    JakobMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    @Paelmchen: Zu den Bewegtabellen hab ich ne Frage:

    Wenn jetzt z.B. meier *keine* Adresse (Feld=NULL) hat. Wie zeig ich dann trotzdem die Tabelle an?

    Soll sowas rauskommen:

    mueller | beruflich | werkstraße
    mueller | privat | feriendorf
    meier | NULL

    Ein normaler Join würde den letzten Eintrag ja fallen lassen. Es muss also ein left Join sein, aber wie bekomm ich das über 3 Tabellen hin?
     
    Jakob, 02.05.2006
  8. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    Wenn ich mich erinnere, kann man mehrere Joins in der Selectabfrage haben.

    Gunter
     
    Gunter_S, 02.05.2006
  9. Paelmchen

    PaelmchenMacUser Mitglied

    Mitglied seit:
    19.08.2005
    Beiträge:
    574
    Zustimmungen:
    27
    Diesen Left Join mußt Du nach rechts weitergeben, dann gibt es keinen Streß :)
     
    Paelmchen, 03.05.2006
Die Seite wird geladen...
Ähnliche Themen - MySQL Abfrage über
  1. xenon96
    Antworten:
    2
    Aufrufe:
    581
    xenon96
    27.06.2015
  2. max@hismac
    Antworten:
    2
    Aufrufe:
    1.610
  3. max@hismac
    Antworten:
    0
    Aufrufe:
    2.356
    max@hismac
    09.05.2013
  4. max@hismac
    Antworten:
    2
    Aufrufe:
    1.854
    nightcoding
    02.06.2012
  5. bluedisc
    Antworten:
    10
    Aufrufe:
    1.242
    bluedisc
    19.12.2010