Nested-Set 'vom Blatt aus' mit komplexer Bedingung für SEO-URL (mySQL)

ZodiacXP

Erfahrenes Mitglied
Hallo. Ein schwieriges Problem für mich, dass ich vielleicht falsch angehe.
Im Anhang gibt es ein ER-Modell der wichtigen Tabellen. Die n:1 bzw. 1:n Beziehung kommt durch die verschiedenen Sprachen (Deutsch, Englisch etc.) zustande.

Hier noch ein paar Beispieldaten (wobei langID 49 'Deutsch' entspricht):

SEO
siteID; langID; URL
1; 49; Einstellungen
2; 49; Profil
3; 49; Profil

Sites
siteID; template; left; right
1; "settings"; 1; 4
2; "profile"; 2; 3
3; "profile"; 5; 6

Wie man sieht wurde die Baumstruktur per Nested-Set gelöst und es können Begriffe doppelt auftauchen.

So soll nun bei der URL "Einstellungen/Profil" der Pfad "settings/profile" erstellt werden. Oder bei der URL "Profil" der Pfad "profile". Und vielleicht sieht man hier schon die Probleme:
  • doppelte Begriffe liefern mehr als einen Baum
  • Pfadangabe setzt sich erst aus dem Baum zusammen
  • und wird dann noch benötigt um den "Template-Pfad" zu erstellen

Das lässt sich zwar lösen durch mehrere Query die nacheinander z.B. erst "Eigenschaften" verarbeiten und dann merken das dort "Profil" gemeint ist, aber es geht sicherlich auch besser.

Hier mein Ansatz:
Code:
SELECT `sites`.*, `seo`.`URL`
FROM
  `sites`,
  `seo`,
  (
    SELECT `sites`.*, `seo`.`URL`
    FROM `sites`, `seo`
    WHERE (`URL` = 'Profil' && `sites`.`siteID` = `seo`.`siteID`)
  ) AS `tmp`
WHERE
     `sites`.`siteID` = `seo`.`siteID`
  && `sites`.`left` <= `tmp`.`left`
  && `sites`.`right` >= `tmp`.`right`

Anhand dieser Daten könnte man einen Algorithmus laufen lassen, der den Pfad erstellt.
Wer hat das schon mal gemacht, kennt ein passendes System oder weis wie man es geschickter löst?
 

Anhänge

  • ER.jpg
    ER.jpg
    48,5 KB · Aufrufe: 14
Zuletzt bearbeitet:
Zurück