SQL Abfrage

Patematthes

Mitglied
Hallo wie man im angehängtem Bild sieht ist die Datenbank wie folgt aufgebaut:

in der tabelle kataster stehen die bereiche welche ausgegeben werden sollen, anhand von benutzereingaben. Ich habe ein Formular mit HTML und PHP gebastelt und je nachdem wie viele optionen angegeben worden sind soll damit gesucht werden.

Beispiel der Benutzer gibt nur die Division an, dies bedeutet ich habe die Divisions_ID und es sollen alle Datensätze aus dem Kataster angezeigt werden die zu der Division gehören.

Meine Frage ist wie würde der dazugehörige SQL Code aussehen. Ich denke ich müsste mit Joins arbeiten, allerdings weiss ich nicht wie das genau funktioniert.

Es wäre schön wenn sich jemand die mühe machen könnte und mir dieses erklären könnte vielleicht auch an Hand der SQL abfrage.

Mit freundlichen Grüßen

Matthias
 

Anhänge

  • beziehungen.jpg
    beziehungen.jpg
    48,4 KB · Aufrufe: 30
JOINS sind eigentlich sehr leicht zu handhaben, allerdings gibt es je nach Datenbank unterschiedliche Arten von JOINS. Hier mal die Abfrage (in MySQL funktioniert die so, evtl. JOIN durch LEFT JOIN oder INNER JOIN ersetzen):
SQL:
SELECT k.id, k.teilbereich
FROM kataster k
JOIN bereich b ON b.bereichs_id = k.bereichs_id
JOIN betrieb be ON be.betriebs_id = b.bereichs_id
JOIN hauptbereich h ON h.hauptbereichs_id = be.hauptbereichs_id
JOIN divisionen d ON d.divisions_id = h.divisions_id
WHERE divisions_id = 1
Ich habe Aliasnamen verwendet um mir etwas Schreibarbeit zu sparen *g*
Wie du siehst, sind JONS eigentlich gar nicht so schwer. Die Reihenfolge ist dabei sogar egal, ich gehe aber immer von der Haupt-Abfrage-Tabelle immer nach außen, so behält man besser den Überblick ;)



Gruß Radhad
 
PHP:
$query = "SELECT kataster.teilbereich FROM kataster LEFT JOIN betrieb ON betrieb.betriebs_id = kataster.betriebs_id LEFT JOIN bereich ON bereich.bereichs_id = betrieb.bereichs_id LEFT JOIN hauptbereich ON hauptbereich.hauptbereichs_id = bereich.hauptbereichs_id LEFT JOIN divisionen ON divisionen.divisions_id = hauptbereich.divisions_id WHERE division.divisions_id = 1";

so sieht die Abfrage nun aus allerdings bekomme ich folgende Fehlermeldung. Weiss jemand rat?

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'betrieb.betriebs_id = kataster.betriebs_id LEFT JOIN bereich ON bereich.bereichs_id = betrieb.bereichs_id LEFT JOIN hauptbereich ON hauptbereich.hauptbereichs_id = bereich.hauptbereichs_id LEFT JOIN divisionen ON divisionen.divisions_id = hauptbereich.divisi'., SQL state 37000 in SQLExecDirect in C:\Programme\xampp\htdocs\Navi\test2\testsuche.php on line 147
 
Sorry, mein Fehler, hab betriebs-Tabelle und Bereichs-Tabelle vertauscht:
SQL:
SELECT kataster.teilbereich
FROM kataster
LEFT JOIN bereich ON bereich.bereichs_id = kataster.bereichs_id
LEFT JOIN betrieb ON betrieb.betriebs_id = bereich.betriebs_id
LEFT JOIN hauptbereich ON hauptbereich.hauptbereichs_id = bereich.hauptbereichs_id
LEFT JOIN divisionen ON divisionen.divisions_id = hauptbereich.divisions_id
WHERE division.divisions_id = 1
 
Zurück