Tabellen verknüpfen
Bernd
- datenbank
0 Hans0 Vinzenz Mai
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...
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
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?
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
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 ;-)
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