Antwort
 
Themen-Optionen Thema durchsuchen
Alt 26.05.2008, 02:06 Nach oben    #1
nox
Benutzer
 
Registriert seit: 22.11.2006
Ort: Haan
Beiträge: 49
Standard MySQL - Benutzte Kategorien

Hi,

ich habe mal wieder eine kleine Denkblockade.

Ich versuche mich kanpp zu halten, aber dennoch nichts zu vergessen.

Mein Aufbau
Kunden können Ihre Artikel wie in einem Shop in eine Kategorie eintragen. Die Kategorien liegen in einer Tabelle und die Artikel in einer anderen, klar.
  • 1
    • 2
    • 5
      • 6
      • 7
  • 9
    • 10
    • 11
    • 12
  • 13
  • 14
    • 15
    • 16
    • 17

Kunde A benutzt nun die Kategorie 1 -> 5 -> 7, in der datenbank speichere ich nur die 7. Es ist aber auch möglich das der Kunde den Artikel in 1 Pakt, also keine Unter/Unterunter -Kategorie.

Mein Vorhaben
Ich möchte einen kleinen Shop für jeden Kunden anbieten. Angezeigt werden sollen jedoch erst nur die Hauptkategorien (1, 9, 13, 14). Wie bekomme ich also raus das die Kategorie 1 eingeblendet werden soll, da ja ein Artikel in der Unterunterkategorie 7 vorhanden ist.

Datenbankstruktur*
category_id, category_parent_id, category_level, category_title


Ich hoffe ich konnte erklären worauf ich hinaus will...


danke und Gruß nox


*Sollte selbsterklärend sein, falls nicht einfach Fragen. Frage ja auch
__________________
nox ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2008, 07:28 Nach oben    #2
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Wenn ichs richtig verstanden habe, ist dein Baum beliebig tief, richtig? Das geht dann nicht in einer einzigen SQL-Abfrage zu machen.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2008, 11:38 Nach oben    #3
nox
Benutzer
 
Registriert seit: 22.11.2006
Ort: Haan
Beiträge: 49
Standard

Hallo,

nein sry das habe ich vergessen, die Maximaltiefe liegt bei der 3 Ebene

Gruß nox
__________________
nox ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2008, 18:22 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 03.05.2008
Beiträge: 12
Standard

Sind category_id und category_parent_id bei category_level='7' NULL?

Warum?
Chrunchy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.05.2008, 16:23 Nach oben    #5
nox
Benutzer
 
Registriert seit: 22.11.2006
Ort: Haan
Beiträge: 49
Standard

Zitat:
Zitat von Chrunchy Beitrag anzeigen
Sind category_id und category_parent_id bei category_level='7' NULL?

Warum?
nein weil es kein category_level='7' gibt, da es nur von 1-3 geht!

category_parent_id enthält die category_id von der übergeordneten Kategorie


Nicht die sauberste Lösung, aber lässt sich leider nicht mehr ändern!

Gruß nox
__________________
nox ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.05.2008, 17:15 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 03.05.2008
Beiträge: 12
Standard

Hm, bei der Angaben...
Zitat:
Datenbankstruktur*
category_id, category_parent_id, category_level, category_title
bin ich davon ausgegangen, dass es die oben abgebildete Datenstruktur wiederspiegelt und nur die category_title fehlen.

Hast du dich schonmal mit der Normalisierung von Datenbanken auseinander gesetzt?

Also entweder du füllst dein oben aufgeführtes Datenkonstrukt mit redundanten Daten, oder du musst alles auf mehrere Tabellen aufteilen (Normalisieren).

Geändert von Chrunchy (28.05.2008 um 17:18 Uhr)
Chrunchy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2008, 20:24 Nach oben    #7
nox
Benutzer
 
Registriert seit: 22.11.2006
Ort: Haan
Beiträge: 49
Standard

Zitat:
Zitat von Chrunchy Beitrag anzeigen
Hm, bei der Angaben...
Zitat:
Datenbankstruktur*
category_id, category_parent_id, category_level, category_title
bin ich davon ausgegangen, dass es die oben abgebildete Datenstruktur wiederspiegelt und nur die category_title fehlen.

Hast du dich schonmal mit der Normalisierung von Datenbanken auseinander gesetzt?

Also entweder du füllst dein oben aufgeführtes Datenkonstrukt mit redundanten Daten, oder du musst alles auf mehrere Tabellen aufteilen (Normalisieren).
Danke für den Hinweis aber meine Datenbankstruktur ist Normalisiert. Was würdest du anders machen? Eine Tabelle für die Hauptkategorien und dann für jede ebene eine neue Tabelle, schwachsinn. Also ich bin offen wenn du eine bessere Idee hast.

Gruß nox
__________________
nox ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2008, 21:06 Nach oben    #8
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Ich habs mir nicht genauer angeguckt, bin mir auch nicht sicher, ob sich das für 3 tiefen lohnt, aber guck einfach mal:
Nested Sets oder Rekursion
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2008, 21:41 Nach oben    #9
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.365
Standard

Zitat:
Zitat von Artemis Beitrag anzeigen
habe ich gerade nur überflogen... aber das schaut mal richtig gut aus!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.06.2008, 14:34 Nach oben    #10
Neuer Benutzer
 
Registriert seit: 03.05.2008
Beiträge: 12
Standard

@nox,

Warum sind gibt es folgenden Eintrag in deiner Tabelle?

category_id = NULL
category_parent_id = NULL
category_level = 7

Wenn du hier nun die Spalten ausfüllst mit
category_id = 1
category_parent_id = 5
category_level = 7

Dann hast du doch zu jedem category-level alle erforderlichen Werte, oder?

Das ganze ist dann identisch mit dem Link von Artemis zur Rekursion.
__________________
Gruß Chrunchy
Chrunchy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.06.2008, 16:08 Nach oben    #11
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
Zitat:
Zitat von Artemis Beitrag anzeigen
habe ich gerade nur überflogen... aber das schaut mal richtig gut aus!
Das hört sich vielleicht schön an, ist es aber bei weitem nicht! Rekursion bei Datenabfragen ist genau so schrecklich wie wenn du Querys in Schleifen abschickst.

In dem Beispiel wird Pro Kategorie ein Query abgesendet um die Unterkategorien zu holen und dann wird für jede Unterkategorie ein Query abgeschickt der deren Unterkategorien ausliest. Bedeutet du hast bei k Kategorien, 2k Querys! Du hast also für jede Kategorie die du anlegst zwei weitere Querys die deine Datenbank bei JEDEM Aufbau des Menüs belasten.

Mit Nested Sets kannst du den ganzen Baum mit einer einzigen Abfrage lösen. Dafür kommen zwar mehr Abfragen beim Hinzufügen/Löschen dazu, aber diese können vernachlässigt werden da Lese/Schreibzugriff in keinem Verhältnis steht!
__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.06.2008, 16:25 Nach oben    #12
nox
Benutzer
 
Registriert seit: 22.11.2006
Ort: Haan
Beiträge: 49
Standard

Zitat:
Zitat von Chrunchy Beitrag anzeigen
@nox,

Warum sind gibt es folgenden Eintrag in deiner Tabelle?

category_id = NULL
category_parent_id = NULL
category_level = 7

Wenn du hier nun die Spalten ausfüllst mit
category_id = 1
category_parent_id = 5
category_level = 7

Dann hast du doch zu jedem category-level alle erforderlichen Werte, oder?

Das ganze ist dann identisch mit dem Link von Artemis zur Rekursion.
Beide Variaten die du geschrieben hast gibt es nicht,
category_id ist niemals! NULL. category_parent_id ist bei den Hauptkategorien NULL, category_level geht immernoch nur bis 3

#Edit:
Jetzt weiss ich auch wie du das siehst, nein so ist es nicht category_level dient nur um herauszufinden in welcher ebene sich die Kategorie befindet. Ist für mehere andere dinge wichtig (Werbemodul etc.)

Zitat:
Zitat von Flor1an Beitrag anzeigen
Das hört sich vielleicht schön an, ist es aber bei weitem nicht! Rekursion bei Datenabfragen ist genau so schrecklich wie wenn du Querys in Schleifen abschickst.

In dem Beispiel wird Pro Kategorie ein Query abgesendet um die Unterkategorien zu holen und dann wird für jede Unterkategorie ein Query abgeschickt der deren Unterkategorien ausliest. Bedeutet du hast bei k Kategorien, 2k Querys! Du hast also für jede Kategorie die du anlegst zwei weitere Querys die deine Datenbank bei JEDEM Aufbau des Menüs belasten.

Boing und Bingo! Genau das ist Mein Problem jedoch das es "nur" 1.000 Kategorien mit allen Haupt und Unterkategorien sind. Denoch währen es kanpp 1.000 SQL-Querys, was ein großes Portal natürlich total in die Knie zwingt!

Also die Lösung nested sets ? Und ich hab gehoft ich komme dieses mal noch drum rum!

Gruß nox
__________________
nox ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] Zufallsdatensätze zu Kategorien optimiert robo47 Datenbanken 3 27.12.2007 17:17
[Suche] MySQL Tool ähnlich MySQL Front ex³ Gesuche 5 22.12.2006 18:52
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
[Linux] LAMP Tutorial - Installation von Apache, MySQL und PHP unter Linux Corvin Tutorials 6 17.04.2006 22:13
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45