Join über 9 Tabllen

darkrider02

Benutzer
Beiträge
6
Hallo Zusammen

Ich erstelle gerade eine MySQL-Datenbank für ein Projekt über Cybersecurity-Richtlinien. Dazu habe ich eine Datenbank erstellt mit folgender Struktur (Siehe Anhang). Es sind 4 Hilfstabellen dazwischen um die m zu m Beziehungen aufzulösen.

Man kann nun über ein HTML-Formular anwählen, zu welchen Kategorien man eine Richtlinie sucht und mittels PHP wird diese dann in der MySQL-Datenbank gesucht.

Nun möchte ich eine Abfrage gestalten, bei der man die Infos der Richtlinien angezeigt bekommt und die mit der Auswahl im HTML-Formular übereinstimmt. Als Beispiel habe ich ausgewählt, dass es mir Richtlinien mit Akteur "Entwickler", Art der Richtlinie "Technisch", Gebäudetyp "Flughafen" und Anwendung "Datenschutz" anzeigen soll.

Wie sieht hier die Abfrage aus? Habe es mit einem Join über alle Tabellen versucht, aber nun stehe ich an.. Ist die Abfrage komplett falsch, liegt es an dem Datentyp BIT oder sonst etwas?

SELECT r.RichtlinienID, r.Autor, r.Titel, r.Publishdate, r.Summary, r.Link FROM Richtlinien r
INNER JOIN AkteureRichtlinien ar1 ON r.RichtlinienID = ar1.RichtlinienID_fk
INNER JOIN Akteure ak ON ar1.Akteure_fk = ak.AkteureID
INNER JOIN ArtRichtlinien art1 ON r.RichtlinienID =art1.RichtlinienID_fk
INNER JOIN ArtRichtlinie art ON art1.Art_fk = art.ArtID
INNER JOIN GebaeudeRichtlinien typ1 ON r.RichtlinienID=typ1.RichtlinienID_fk
INNER JOIN Gebaeudetyp typ ON typ1.Typ_fk = typ.TypID
INNER JOIN AnwendungRichtlinien an1 ON r.RichtlinienID = an1.RichtlinienID_fk
INNER JOIN Anwendung an ON an1.Anwendung_fk = an.AnwendungID
WHERE ak.entwickler = 1 AND art.technisch = 1 AND typ.flughafen = 1 AND an.datenschutz = 1
ORDER BY RichtlinienID

Momentan erhalte ich zwar keine Fehlermeldung, jedoch wird auch kein Datensatz angezeigt, obwohl einer mit solchen Werten vorhanden ist.


Danke für eure Hilfe!
 

Anhänge

  • Struktur.PNG
    Struktur.PNG
    125,6 KB · Aufrufe: 5
Zuletzt bearbeitet:
Werbung:
das ist Murks und kann daher weg. Wenn z.B. ein neuer Gebäudetyp 'Bunker' oder 'Zelt' dazukommt, oder eine neue Anwendung 'Bullshitgenerator', dann mußt Du jedesmal Deine Tabellen und Abfragen ändern.
 
Ohne zu wissen, welche Daten eingetragen sind, kann man das nicht beantworten.
Da Du 4 Einschränkungen in der Where Clause hast, gilt das um so mehr.

Hilfreich sind bei solche Fragen kleine Scripte (statt Bilder), die Create Statements und Daten sowie die fragwürdige Abfrage enthalten,
Ergebnis und erwartetes Ergebnis, plus Fehlermeldung, falls eine auftritt. Das macht es Dir und den Helfern einfacher, bestimmte Szenarien eben durchzuspielen.

Da Du bereits einige Referenzen verwendest bzw. modeliert hast, frag ich mich, warum Du bewusst die Ecke mit den Gebäudetypen verbastelst?
Die nächste Frage Deinerseits wäre dann vermutlich irgendwann, (wie hier grad nebenan irgendwo) wie man eine Abfrage baut, in der alle Gebäudetypen aufgelistet werden.
Wieso tut man sich das sehenden Auges an?
 
Hier was ich bisher gemacht habe:

CREATE TABLE `Richtlinien` (
`RichtlinienID` int(15) NOT NULL PRIMARY KEY,
`Autor` varchar(40),
`Titel` varchar(100),
`Publishdate` date,
`Summary` varchar(1000),
`Link` varchar (200)
);
CREATE TABLE `Akteure` (
`AkteureID` int(15) NOT NULL PRIMARY KEY,
`alle` BIT(1),
`entwickler` BIT(1),
`integrator` BIT(1),
`betreiber` BIT(1),
`produzent` BIT(1),
`endkunde` BIT(1),
`experte` BIT(1),
`behoerden` BIT(1)
);
CREATE TABLE `ArtRichtlinie` (
`ArtID` int(15) NOT NULL PRIMARY KEY,
`management` BIT(1),
`technisch` BIT(1)
);
CREATE TABLE `Gebaeudetyp` (
`TypID` int(15) NOT NULL PRIMARY KEY,
`allgemein` BIT(1),
`wohn` BIT(1),
`offen` BIT(1),
`industrie` BIT(1),
`buro` BIT(1),
`medizin` BIT(1),
`flughafen` BIT(1),
`kritisch` BIT(1)
);
CREATE TABLE `Anwendung` (
`AnwendungID` int(15) NOT NULL PRIMARY KEY,
`sicherheit` BIT(1),
`informationssicherheit` BIT(1),
`datenschutz` BIT(1),
`netzwerksicherheit` BIT(1),
`anwendungssicherheit` BIT(1),
`tipps` BIT(1),
`updates` BIT(1),
`maschinen` BIT(1),
`cloud` BIT(1),
`netzwerkarchitektur` BIT(1),
`ics` BIT(1),
`energie` BIT(1),
`smarthome` BIT(1)
);
CREATE TABLE `AkteureRichtlinien` (
`Akteure_fk` int(15) NOT NULL ,
`RichtlinienID_fk` int(10) NOT NULL,
FOREIGN KEY (RichtlinienID_fk) REFERENCES Richtlinien (RichtlinienID),
FOREIGN KEY (Akteure_fk) REFERENCES Akteure (AkteureID)
);
CREATE TABLE `ArtRichtlinien` (
`Art_fk` int(15) NOT NULL ,
`RichtlinienID_fk` int(10) NOT NULL,
FOREIGN KEY (RichtlinienID_fk) REFERENCES Richtlinien (RichtlinienID),
FOREIGN KEY (Art_fk) REFERENCES ArtRichtlinie (ArtID)
);
CREATE TABLE `GebaeudeRichtlinien` (
`Typ_fk` int(15) NOT NULL ,
`RichtlinienID_fk` int(10) NOT NULL,
FOREIGN KEY (RichtlinienID_fk) REFERENCES Richtlinien (RichtlinienID),
FOREIGN KEY (Typ_fk) REFERENCES Gebaeudetyp (TypID)
);
CREATE TABLE `AnwendungRichtlinien` (
`Anwendung_fk` int(15) NOT NULL ,
`RichtlinienID_fk` int(10) NOT NULL,
FOREIGN KEY (RichtlinienID_fk) REFERENCES Richtlinien (RichtlinienID),
FOREIGN KEY (Anwendung_fk) REFERENCES Anwendung (AnwendungID)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Daten für Tabelle `autos`
--
INSERT INTO `Richtlinien` (`RichtlinienID`, `Autor`, `Titel`, `Publishdate`, `Summary`, `Link` ) VALUES
(1, 'AIOTI', 'High Level Architecture Functional Model' , '2016-09-01' , 'AIOTI WG3 has developed a High Level Architecture (HLA) for IoT. This document provides an initial proposal for a high-level IoT architecture. This document: - Introduces the use of ISO/IEC/IEEE 42010 by AIOTI WG3 - Presents a Domain Model and discusses the thing in IoT - Presents a Functional Model - Links this work with the AIOTI WG3 Semantic Interoperability work and the SDO Landscape work', 'https://aioti.eu/wp-content/uploads/2017/03/AIOTI-WG3-IoT-High-Level-Architecture-Release_2_1.pdf'),
(2, 'AT&T', 'The CEOs Guide to Securing the Internet of Things', '2005-07-08', 'The document provides a strategic framework for securing the IoT, crafted from the work AT&T is doing with customers across many industries as well as with their own IoT deployments.', 'https://www.business.att.com/conten...securing-the-inernet-of-things-whitepaper.pdf'),
(3, 'BITAG', 'Internet of Things (IoT) Security and Privacy Recommendations', '2016-11-22', 'Report on the technical aspects of Internet of Things (IoT) security and privacy outlining a number of observations and recommendations.', 'BITAG'),
(4, 'CIS', 'Internet of Things Security Companion to the CIS Critical Security Controls' , '2015-10-31', 'A guide on how to map the critical security controls to the IoT world. No more no less. 20 pages.', 'https://www.cisecurity.org/wp-conte...Controls-IoT-Security-Companion-201501015.pdf'),
(5, 'CSA', 'Future Proofing the Connected World - 13 Steps to Developing Secure IoT Products', '2016-10-07', '80-page guidance on development of secure IoT products released by the IoT Working Group of CSA.', 'https://cloudsecurityalliance.org/artifacts/future-proofing-the-connected-world/');
INSERT INTO `Akteure` (`AkteureID`, `alle`, `entwickler`, `integrator`, `betreiber`, `produzent`, `endkunde`, `experte`, `behoerden`) VALUES
(1, 0, 0, 0, 0, 0, 0, 0, 1),
(2, 1, 0, 0, 0, 0, 0, 0, 0),
(3, 1, 0, 0, 0, 0, 0, 0, 0),
(4, 0, 1, 1, 1, 1, 1, 0, 0),
(5, 0, 1, 1, 0, 1, 0, 0, 0);
INSERT INTO `ArtRichtlinie` (`ArtID`, `management`, `technisch`) VALUES
(1, 0, 1),
(2, 1, 0),
(3, 0, 1),
(4, 0, 1),
(5, 1, 0);
INSERT INTO `Gebaeudetyp` (`TypID`, `allgemein`, `wohn`, `offen`, `industrie`, `buro`, `medizin`, `flughafen`, `kritisch`) VALUES
(1, 1, 0, 0, 0, 0, 0, 0, 0),
(2, 1, 0, 0, 0, 0, 0, 0, 0),
(3, 1, 0, 0, 1, 0, 1, 0, 0),
(4, 1, 0, 0, 0, 0, 0, 0, 0),
(5, 1, 0, 0, 0, 0, 0, 0, 0);
INSERT INTO `Anwendung` (`AnwendungID`, `sicherheit`, `informationssicherheit`, `datenschutz`, `netzwerksicherheit`, `anwendungssicherheit`, `tipps`, `updates`, `maschinen`, `cloud`, `netzwerkarchitektur`, `ics`, `energie`, `smarthome`) VALUES
(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),
(2, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0),
(3, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1),
(4, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0),
(5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
das liefert auch bei komplett ohne WHERE nix.

Ich hab da aber jetzt keinen Bock zu suchen, was da falsch ist - denn das gesamte Konstrukt ist ja schon falsch. Aber das hatten wir ja schon besprochen.
 
Werbung:
Zurück
Oben