klausschreiber
Well-known member
- 6 Mai 2006
- 247
- 8
Hallo,
ich habe ein Problem mit MySQL und bin dort, bzw. generell mit Datenbankabfragen eher ein Neuling. Ich schreibe ein PHP-Script, wo man Dateien hochladen kann und verschiedenen Kategorien zuordnen kann. Eine Datei kann dabei auch mehreren Kategorien angehören.
Hier mal ein Bild des Teils, der für die Kategorisierung zuständig ist:
Die erste Tabelle lautet "dirs". "dirs" steht für Verzeichnis, da bei jedem Upload ein neues Verzeichnis erstellt wird mit fortlaufender Nummer. Die "DirID" ist einerseits der Primärschlüssel der Tabelle und andererseits die Nummer des Verzeichnisses. Der genaue Dateiname wird in einer extra Tabelle gespeichert, da ein Verzeichnis mehrere Dateien enthalten kann, wenn sie zum gleichen Thema sind (z.B. die gleiche Datei als .pdf und als .jpg). Alle Dateien in einem Verzeichnis sind der/den gleichen Kategorie zugeordnet. Daher reicht es, wenn ich das Verzeichnis der/den gewünschten Kategorie zuordne.
Die dritte Tabelle lautet "categories". Dort ist "CategorieID" der Primärschlüssel und "CategorieName" enthält den Namen der Kategorie (z.B. Mathematik, Deutsch oder sonst irgendetwas)
Die zweite Tabelle "dirs_categories" verbindet beide Tabellen miteinander. Die Beziehungen zueinander sind "dirs.DirID=dirs_categories.DirNR" und "categories.CategorieID=dirs_categories.CategorieNR".
Nun nehmen wir folgenden Inhalt für die Tabelle "categories" an:
Wenn ich nun alle Verzeichnisse aufgelistet haben will, die in der Kategorie "Mathematik" sind, also die KategorieID=2 haben, kann ich das ja relativ einfach über die Tabellen "dirs" und "dirs_categories" abfragen, da die "CategorieID" ja als Fremdschlüssel in der "dirs_categories" enthalten ist. Eine einfache Abfrage würde dann also folgendermaßen lauten:
Aber wie muss die Abfrage lauten, wenn ich nur die Verzeichnisse aufgelistet haben will, die z.B. sowohl in der Kategorie "Mathematik", als auch in der Kategorie "schwer" enthalten sind?
Mir ist keine Lösung eingefallen, aber das muss doch möglich sein, oder ist das nur mit PHP zu lösen?
Danke für eure Antworten,
Gruß,
Klaus
ich habe ein Problem mit MySQL und bin dort, bzw. generell mit Datenbankabfragen eher ein Neuling. Ich schreibe ein PHP-Script, wo man Dateien hochladen kann und verschiedenen Kategorien zuordnen kann. Eine Datei kann dabei auch mehreren Kategorien angehören.
Hier mal ein Bild des Teils, der für die Kategorisierung zuständig ist:
Die erste Tabelle lautet "dirs". "dirs" steht für Verzeichnis, da bei jedem Upload ein neues Verzeichnis erstellt wird mit fortlaufender Nummer. Die "DirID" ist einerseits der Primärschlüssel der Tabelle und andererseits die Nummer des Verzeichnisses. Der genaue Dateiname wird in einer extra Tabelle gespeichert, da ein Verzeichnis mehrere Dateien enthalten kann, wenn sie zum gleichen Thema sind (z.B. die gleiche Datei als .pdf und als .jpg). Alle Dateien in einem Verzeichnis sind der/den gleichen Kategorie zugeordnet. Daher reicht es, wenn ich das Verzeichnis der/den gewünschten Kategorie zuordne.
Die dritte Tabelle lautet "categories". Dort ist "CategorieID" der Primärschlüssel und "CategorieName" enthält den Namen der Kategorie (z.B. Mathematik, Deutsch oder sonst irgendetwas)
Die zweite Tabelle "dirs_categories" verbindet beide Tabellen miteinander. Die Beziehungen zueinander sind "dirs.DirID=dirs_categories.DirNR" und "categories.CategorieID=dirs_categories.CategorieNR".
Nun nehmen wir folgenden Inhalt für die Tabelle "categories" an:
Code:
[B]CategorieID[/B] [B]CategorieName[/B]
1 Deutsch
2 Mathematik
3 leicht
4 schwer
PHP:
SELECT *
FROM dirs, dirs_categories
WHERE dirs.DirID=dirs_categories.DirNR AND dirs_categories.CategorieNR=2
Mir ist keine Lösung eingefallen, aber das muss doch möglich sein, oder ist das nur mit PHP zu lösen?
Danke für eure Antworten,
Gruß,
Klaus