MySQL - Abfrage über mehrere Tabellen

Diskutiere mit über: MySQL - Abfrage über mehrere Tabellen im Datenbanksysteme für das Web Forum

  1. BalkonSurfer

    BalkonSurfer Thread Starter Banned

    Beiträge:
    5.164
    Zustimmungen:
    0
    Registriert seit:
    27.07.2003
    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ß
     
  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.773
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    SELECT id,name,inhalt FROM Tabelle1, Tabelle2
     
  3. Darkstar

    Darkstar MacUser Mitglied

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

    BalkonSurfer Thread Starter Banned

    Beiträge:
    5.164
    Zustimmungen:
    0
    Registriert seit:
    27.07.2003
    Danke!
    Endlich habe ich auch den Sinn von Join kapiert ;)
     
  5. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    Registriert seit:
    31.01.2005
    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 ...
     
  6. Paelmchen

    Paelmchen MacUser Mitglied

    Beiträge:
    576
    Zustimmungen:
    27
    Registriert seit:
    19.08.2005
    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
     
  7. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    @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?
     
  8. Gunter_S

    Gunter_S MacUser Mitglied

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

    Gunter
     
  9. Paelmchen

    Paelmchen MacUser Mitglied

    Beiträge:
    576
    Zustimmungen:
    27
    Registriert seit:
    19.08.2005
    Diesen Left Join mußt Du nach rechts weitergeben, dann gibt es keinen Streß :)
     
Die Seite wird geladen...
Ähnliche Themen - MySQL Abfrage über Forum Datum
mysql abfrage optimieren Datenbanksysteme für das Web 26.03.2014
langsame Abfrage mit JOIN in MySQL Datenbanksysteme für das Web 25.02.2009
Idee für MySQL-Abfrage gesucht Datenbanksysteme für das Web 10.12.2008
Frage wegen MySQL-Abfrage Datenbanksysteme für das Web 09.09.2008
spezielle MySQL Abfrage Datenbanksysteme für das Web 29.07.2008

Diese Seite empfehlen

Benutzerdefinierte Suche