hi
ich hab ein kleines Problem mit einer SQL Abfrage. Also es gibt mehrere Tabellen:
basic
id | table
1 | basic_adults
2 | basic_children
3 | basic_animals
basic_adults
id | name
1 | Thomas
2 | Klara
3 | Bernd
4 | Mathias
5 | Heidi
basic_children
id | schoolid | age | hobbys
1 | 5 | 15 | blabla
2 | 21 | 17 | blabla
3 | 16 | 13 | blabla
4 | 8 | 10 | blabla
5 | 13 | 6 | blabla
basic_animals
id | type | name
1 | Krodile | Krok
2 | Bird | Birdie
3 | Cat | Muschi
4 | Dog | Wuffi
5 | Fish | Blubbi
...
basic_ ... werden im laufe der Zeit mehr, aber die drei nur als Beispiel
...
house
id | houseid | rid | Etage
1 | 1 | 1 | 1
2 | 1 | 2 | 1
3 | 1 | 3 | 2
4 | 2 | 6 | 1
5 | 2 | 7 | 2
relations
id | rid | tid| pid
1 | 1 | 1 | 3
2 | 1 | 2 | 2
3 | 2 | 1 | 4
4 | 2 | 1 | 5
5 | 3 | 1 | 1
6| 3 | 1 | 6
7| 3 | 2 | 4
basic_adults: Alle Erwachsenen eingetragen
basic_children: Alle Kinder eingetragen
basic_animals: Alle Tiere eingetragen
house: hier sind alle Familien eingetragen
relations:
rid = relation_id (verbindet mehrere Personen -> tabelle house)
tid = tabellen_id von basic
pid = personene_id aus basic_adults, basic_children
Im Script ist folgendes gegeben:
$etage_start = $_POST['start'];
$etage_end = $_POST['end'];
$houseid = $_POST['hid'];
$table_1 = $_POST['table_1']; // = 1 -> basic_adults
$table_2 = $_POST['table_2']; // = 2 -> basic_children
Ich möchte nun folgende Daten aus der DB holen:
Alle Kinder und Erwachsene ($table_1,$table_2) die in Houseid = 5 wohnen von Etage 1 - 3 auslesen.
Der Aufbau ist etwas kompliziert, weil mir keine andere Idee zum DB Aufbau gekommen ist, da da noch einige andere Tabellen
dazukommen.
Hier mein kläglicher Versuch:
SELECT * FROM
house h
LEFT JOIN relations r USING (rid)
CASE
WHEN r.tid = 1 THEN LEFT JOIN basic_adults d ON (r.pid = d.id)
WHEN r.tid = 2 THEN LEFT JOIN basic_children d ON (r.pid = d.id)
WHEN r.tid = 3 THEN LEFT JOIN basic_animals d ON (r.pid = d.id)
END
WHERE
h.etage = 2
ich mach da schon seit einigen stunden rum und das war mein letzter Versuch - der aber wie ich bemerkt habe sehr viele denkfehler beinhaltet und die CASE END ohnehin nicht funktioniert.
Geht das mit dem DB Aufbau überhaupt die Daten mit einem Mal herauszuholen?
Wenn nicht, wie mache ich das sinnvoll in mehreren schritten?
bin gespannt
danke CrazyPip
ich hab ein kleines Problem mit einer SQL Abfrage. Also es gibt mehrere Tabellen:
basic
id | table
1 | basic_adults
2 | basic_children
3 | basic_animals
basic_adults
id | name
1 | Thomas
2 | Klara
3 | Bernd
4 | Mathias
5 | Heidi
basic_children
id | schoolid | age | hobbys
1 | 5 | 15 | blabla
2 | 21 | 17 | blabla
3 | 16 | 13 | blabla
4 | 8 | 10 | blabla
5 | 13 | 6 | blabla
basic_animals
id | type | name
1 | Krodile | Krok
2 | Bird | Birdie
3 | Cat | Muschi
4 | Dog | Wuffi
5 | Fish | Blubbi
...
basic_ ... werden im laufe der Zeit mehr, aber die drei nur als Beispiel
...
house
id | houseid | rid | Etage
1 | 1 | 1 | 1
2 | 1 | 2 | 1
3 | 1 | 3 | 2
4 | 2 | 6 | 1
5 | 2 | 7 | 2
relations
id | rid | tid| pid
1 | 1 | 1 | 3
2 | 1 | 2 | 2
3 | 2 | 1 | 4
4 | 2 | 1 | 5
5 | 3 | 1 | 1
6| 3 | 1 | 6
7| 3 | 2 | 4
basic_adults: Alle Erwachsenen eingetragen
basic_children: Alle Kinder eingetragen
basic_animals: Alle Tiere eingetragen
house: hier sind alle Familien eingetragen
relations:
rid = relation_id (verbindet mehrere Personen -> tabelle house)
tid = tabellen_id von basic
pid = personene_id aus basic_adults, basic_children
Im Script ist folgendes gegeben:
$etage_start = $_POST['start'];
$etage_end = $_POST['end'];
$houseid = $_POST['hid'];
$table_1 = $_POST['table_1']; // = 1 -> basic_adults
$table_2 = $_POST['table_2']; // = 2 -> basic_children
Ich möchte nun folgende Daten aus der DB holen:
Alle Kinder und Erwachsene ($table_1,$table_2) die in Houseid = 5 wohnen von Etage 1 - 3 auslesen.
Der Aufbau ist etwas kompliziert, weil mir keine andere Idee zum DB Aufbau gekommen ist, da da noch einige andere Tabellen
dazukommen.
Hier mein kläglicher Versuch:
SELECT * FROM
house h
LEFT JOIN relations r USING (rid)
CASE
WHEN r.tid = 1 THEN LEFT JOIN basic_adults d ON (r.pid = d.id)
WHEN r.tid = 2 THEN LEFT JOIN basic_children d ON (r.pid = d.id)
WHEN r.tid = 3 THEN LEFT JOIN basic_animals d ON (r.pid = d.id)
END
WHERE
h.etage = 2
ich mach da schon seit einigen stunden rum und das war mein letzter Versuch - der aber wie ich bemerkt habe sehr viele denkfehler beinhaltet und die CASE END ohnehin nicht funktioniert.
Geht das mit dem DB Aufbau überhaupt die Daten mit einem Mal herauszuholen?
Wenn nicht, wie mache ich das sinnvoll in mehreren schritten?
bin gespannt
danke CrazyPip
Kommentar