Solkar: MySQL: Hierarchische SELECTS

Beitrag lesen

Ist die Schachtelungstiefe der Kategorien konstant oder gibt es zumindest eine Obergrenze?

Nein, ist sie nicht, mit einer Obergrenze koennte ich mich abfinden, so bei 5,6 Verschachtelungen

Hat sich erledigt, da Deine Datenstruktur schon auf beliebige Schachtelungstiefen angepasst ist.

Bitte vorsorglich Versionsnummer von MySQL, Plattform und verwendete Programmiersprache angeben!

Mysql-Version: 4.1.22,

Also gibt es SUB-Queries

Ich verwende PHP 4.4.7, der Server lauft unter Linux,

Also gibt es kein ADO; damit hätte man dies nämlich etwas schlanker halten könen

habe dort aber nur Webspace, also keine Adminstrations- oder Konfigurationsmoeglichkeiten.

Um es besser zu Formulieren: Ich verwende ein Adressierungssytem fuer Kategorien, bei der jeder Kategorie ein Links- und ein Rechtswert zugewiesen wird (beschrieben auf unten angehaengter Website),

Das meinte ich mit "komplex"; gut, das Du das schon hast!

kenn ich nun links und rechts der Kategorie, in der sich eine News tatsaechlich befindet, kann ich mit der Abfrage

SELECT katname from katg WHERE links < (Linkswert der untersten Kategorie) AND rechts > (Rechtswert der untersten Kategorie)

Hab grad nicht die Zeit um die Struktur jetzt nachzubilden aber ich wage mal einen Ansatz:

  
SELECT GROUP_CAT(k_tree.kat_name), n.irgendwas FROM news n  
    INNER JOIN katg k1  
        ON n.katg_id = k1.id  
    INNER JOIN (SELECT k2.katname, k2.links, k2.rechts from katg k2) k_tree  
        ON (k_tree.links <= k1.links AND k1.rechts >= k_tree.rechts);  

Die Syntax ist nicht geprüft; da musst Du vlt. nachbessern aber meine Grundidee ist, dass Du aus Deiner WHERE-clause einen JOIN machst.

Wie geasagt, das ist ungeprüft, aber vlt. hilft's ja.

Grüsse

Solkar

alle Ueberkategorien herausfinden und so einen Kategoriebaum erstellen.

Dies will ich alles in einem Query machen, indem ich eben diese Abfrage machen, sie grouppiere und die Kategorienamen aneinanderhaenge (mit GROUP_CAT) und dies schliesslich mit der Abfrage ueber meines News verbinde.
Spaeter kann ich dann in PHP ganz einfach ueber explode die Vaterkategorien auslesen (wenn es denn klappt).

Gruss,
Bastian

--
In the beginning, the Giver Of Data created the Kernel and the C.
And the C was without main and (void*).
Thus spake the Giver Of Data: Thou shalt indent with four spaces. No more, no less.
Four shall be the number of spaces thou shalt indent, and the number of thy
indenting shall be four. Eight shalt thou not indent, nor either indent thou
two, excepting that thou then proceed to four. Tabs are right out.
ie:} fl:{ br:> va:{ ls:} fo:# rl:( n4:? ss:} de:> js:) ch:? sh:( mo:? zu:(