mehrere Tabellen auslesen und ergebnis speziell sortieren

mille

Erfahrenes Mitglied
Hallo!

Angenommen ich hab folgende Datenbankstruktur

table_hauptkagegorie
ID | name

table_unterkategorie1
ID | ID_hauptkategorie | name

table_unterkategorie2
ID | ID_unterkategorie1 | name


Wenn hinter dieser Struktur nun ein Menü steckt, welches aus 3 Ebenen besteht, wobei in der Tabelle Unterkategorien2 die 3 Ebene liegt, die einer Unterkategorie1 zugeordnet ist, welcher wiederrum unter einer Hauptkategorie zu finden ist, wie kann ich dann ein auslesen der Art realisieren, das ich ein Array (für PHP) erhalte, das mir gleich die korrekte Reihen folge darstellt.

sinngemäß müsste der Syntax ja so aussehen: "SELECT * FROM table_hauptkategorie, table_unterkategorie1, table_unterkategorie2" um erstmal das komplette menü auszulesen.

Nun ein Beispiel für ein sinnfreies Menü:
Filme
__Action
____unter 90 minuten
____ueber 90 Minuten
__Komödien
____schwarzer Humor
____vor 2005
____nach 2005
__Tragik
____Herzschmerz
____Krieg
Bücher
__Romane
____Liebe
____Action
__Sachbücher
____PHP
____MYSQL
____C++

die Entsprechende Tabelle würde ja so aussehn
table_Hauptkategorien
1 | Filme
2 | Bücher

table_Unterkategorie1
1 | 1 | Action
2 | 1 | Komödien
3 | 1 | Tragik
4 | 2 | Romane
5 | 2 | Sachbücher

table_Unterkategorie2
1 | 1 | Unter 90 Minuten
2 | 1 | Über 90 Minuten
.... (ich denk nicht, das ich jetzt weiter fortfahren muss, ihr wisst ja was ich meine :) )

Ich hätte jetzt gerne ein Array in folgender Form (ich zähle es auf, wie man es in PHP statisch definieren würde). es soll aber dynamisch an Hand der Tabelle entstehen, aber gerade das ist ja mein Problem :)

0 => "Filme",
1 => "Action",
2 => "unter 90 Minuten",
3 => "über 90 Minuten",
4 => "Komödien",
5 => "schwarzer Humor",
6 => "vor 2005",
7 => "nach 2005",
...
18 => "MYSQL"
19 => "C++"


Wie regle ich das? Sicherlich könnte ich das über einige PHP Operation auch organisieren, aber damit mache ich das Skript zu langsam, ich hätte gern ein komplettes ergebnis von der Datenbank geliefert, damit bleibt das Skript performanter :).
Falls ich mich irre, dann berichtigt mich.
Bisher habe ich diesbezüglich noch keine Zeile programmiert, ich überlege mir gerne vorher wie ich etwas realisiere, bevor ich stundenlang rumprobiere.

MfG
Mille
 
Ich würde deine vorgeschlagene Lösung mal in Frage Stellen.
1. Was passiert wenn du noch eine weitere unterkategorie hast? Legst du dann noch eine Tabelle an?
2. Du möchtest ein Array in der Form


0 => "Filme",
1 => "Action",
2 => "unter 90 Minuten",
3 => "über 90 Minuten",
4 => "Komödien",
5 => "schwarzer Humor",
6 => "vor 2005",
7 => "nach 2005",
...
18 => "MYSQL"
19 => "C++"
Woran erkennst du wenn sich eine Kategorie verändert? Woher weisst du, dass 2+3 zur Oberkategorie 1 gehören und nicht zur Oberkategorie 0. Das ist aus dem Array nicht erkennbar.

Würde dir empfehlen nur eine Tabelle anzulegen und zwar in der form

id name parent_id
1 Filme
2 Action 1
3 über 90 2
4 unter 90 2
...
So könntest du beliebig viele Kategorien verwalten. Welche RDBMS setzt du denn ein? Unter Oracle kannst du sowas wunderbar mit connect by prior lösen. Unter MySql wirst du dir anders helfen müssen

Nur mal ne Anregung, da du ja eh noch keinen Code geschrieben hast.
 
Zuletzt bearbeitet:
Deine Idee is gut.
Nun gut, dann mal kurz ein wenig mehr infos zu meiner Grobplanung.
Das menü hat maximal 3 ebenen. Jede weitere Ebene hat in der Darstellung auf der Webseite spezielle eigenschaften, daher muss ich wissen aus welcher Ebene ein Menüpunkt stammt - daher auch die 3 Tabellen. In einer Tabelle würde das schwerer zu machen sein. Oder?

Ich nutze MYSQL, da mein Webspace nur sql unterstützt und ich momentan auch nur mit sql umgehen kann. Oracle lerne ich erst im kommenden Semester ;). Mein Projekt muss aber vorher fertig werden.

In dem Array erkennt man die ebene im übrigen daran, dass ich nich einfach Strings haben möchte, sondern ein 2 Dimensionales array. Das habe ich schon bedacht. Die infos gehen aber über das eigentliche Problem hinaus, weshalb ich es auf ein eindimensionalesArray beschränkt habe.
 
Ich hab grad noch mal drüber nachgedacht.
Ich würde diene Idee abändern zu

ID | name | parent_ID | ebene
1 | filme | NULL | 1
2 | action | 1 | 2
....

Dann hab ich das Problem nicht und das sortieren kann ich ja über ID und Ebene realisieren?
 
Zuletzt bearbeitet:
Zurück