tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
679
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    818
    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
     
    man wird erwachsen ....

  2. #2
    z-coupe z-coupe ist offline Mitglied Gold
    Registriert seit
    Jan 2006
    Beiträge
    118
    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.
    Geändert von z-coupe (27.07.06 um 14:58 Uhr)
     

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    818
    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.
     
    man wird erwachsen ....

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    818
    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?
    Geändert von mille (27.07.06 um 15:19 Uhr)
     
    man wird erwachsen ....

Ähnliche Themen

  1. SELECT über mehrere Tabellen sortieren
    Von DiDiJo im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 17.02.09, 17:19
  2. Mehrere Tabellen auslesen
    Von mkoeni1 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 04.10.07, 22:23
  3. MySQL: Mehrere Tabellen auslesen und Ergebnis auswerten
    Von tuFrogs im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 13.09.07, 15:24
  4. [MySQL] Zwei Tabellen abfragen und Ergebnis sortieren
    Von DJLopez im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 01.07.07, 23:49
  5. mehrere spl tabellen inhalte sortieren
    Von deep_popel im Forum PHP
    Antworten: 3
    Letzter Beitrag: 05.11.03, 09:32