Bernd: Tabellen verknüpfen

hallo forum!

ich habe zwie mysql-tabellen (siehe unten). nun möchte ich für jeden user (im beispiel hauser, huber, meier) ausgeben, welches essen er denn für jeden einzelnen wochtentag ausgewählt hat. das wäre im falle von herrn meier TM, , M1, M1, M2. weil das den leuten aber wenig sagt, sollen sie die vollständigen essensbezeichungen aus der "tabelle essensplan" geliefert bekommen (wird alles per php gemacht). mein frage: wie sieht das select aus, daß ich von der "tabelle essensbelegung" auf die inhalte der "tabelle essensplan" schliessen kann? ich probier seit stunden herum aber komme nicht drauf :-(

vielen dank im voraus!

tabelle essensplan
_______________________

ID Wochentag M1 M2 TM

1 MO  essen1 essen2 essen3
2 DI  food1 food2 food3
3 MI  bla1 bla2 bla3
4 DO  xy1 xy2 xy3
5 FR  foo bar com

tabelle essensbelegung
_______________________

Name  MO DI MI DO FR

Hauser  M2 M1 TM TM M1
Huber  M1 M1 TM M2
Meier  TM  M1 M1 M2
usw...

  1. Hallo !

    Änder mal Deine Tabellen:

    tabelle essensplan
    _______________________

    ID Wochentag M1 M2 TM

    1 MO  essen1 essen2 essen3
    2 DI  food1 food2 food3
    3 MI  bla1 bla2 bla3
    4 DO  xy1 xy2 xy3
    5 FR  foo bar com

    Besser:

    tabelle essensplan
    -------------------------
    ID Wochentag Kategorie Essen
    1  MO        M1        essen1
    2  MO        M2        essen2
    3  MO        TM        essen3
    4  DI        M1        food1

    etc.

    tabelle essensbelegung
    _______________________

    Name  MO DI MI DO FR

    Hauser  M2 M1 TM TM M1
    Huber  M1 M1 TM M2
    Meier  TM  M1 M1 M2
    usw...

    Besser:

    tabelle essensbelegung
    ----------------------
    Name      Mo DI MI DO FR
    Hauser    1  4  7  10 13
    Huber     2  4  8  11 14

    etc.

    Select-Statement:

    select a.name, b.essen, c.essen, d.essen, e.essen, f.essen
    from essensbelegung a, essensplan b, essensplan c, essensplan d, essensplan e, essensplan f
    where a.mo=b.id
    and a.di=c.id
    and a.mi=d.id
    and a.do=e.id
    and a.fr=f.id;

    Gruß

    Hans

    1. Danke Hans!

      Ich dachte fast, daß es grausam wird ;-) Dann muß ich nämlich etliche Scripte ändern... mit der bestehenden Struktur gibt es kein Statement?

      1. Danke Hans!

        Ich dachte fast, daß es grausam wird ;-) Dann muß ich nämlich etliche Scripte ändern... mit der bestehenden Struktur gibt es kein Statement?

        Hallo Bernd

        Nun, es ist halt schwierig, weil Du als Werte die Spaltennamen der anderen Tabelle hast.

        Und es gibt kein Statement a la

        select (select Mo from essensplan where name=huber), (select Di from essensplan where name=huber) from essensbelegung;

        Gruß

        Hans

        1. Ja, das ist genau das Problem. Ich werde es wohl so machen, daß ich mit UNION arbeiten (bin grad beim googeln drübergestolpert, müßte hinhauen). Jetzt muß ich nur noch rauskriegen, wie das geht ;-)

  2. Hallo Bernd,

    ich habe zwie mysql-tabellen (siehe unten). [...] Meine Frage: wie sieht das select aus, daß ich von der "tabelle essensbelegung" auf die inhalte der "tabelle essensplan" schliessen kann? ich probier seit stunden herum aber komme nicht drauf :-(

    Dazu gibt es die Joins. Hilfreiche Lektüre dazu wären:

    Einführung Joins
    Fortgeschrittene Join-Techniken

    tabelle essensplan
    ID Wochentag M1    M2     TM
    --------------------------------
    1  MO       essen1 essen2 essen3
    2  DI       food1  food2  food3
    3  MI       bla1   bla2   bla3
    4  DO       xy1    xy2    xy3
    5  FR       foo    bar    com

    tabelle essensbelegung
    Name    MO DI MI DO FR
    -----------------------
    Hauser  M2 M1 TM TM M1
    Huber   M1 M1 TM M2
    Meier   TM M1 M1 M2

    Deine Tabellenstruktur ist jedoch verbesserungswürdig. Du solltest die drei verschiedenen Essen nicht in drei Spalten abspeichern, genausowenig wie die fünf Wochentage in Spalten. Die Spalte Name zur Identifizierung eines Datensatzes ist ebenfalls nicht ideal. Was machst Du bei zwei, die Müller heißen?

    Lies Dir Rouvens Artikel durch, strukturiere Deine Tabellen neu, dann geht alles (fast) wie von selbst :-)

    Freundliche Grüße

    Vinzenz