Ich habe eine Datenbanktabelle mit verschachtelten URLs strukturiert, mit ParentID und ID zu sagen, welcher Teil einer URL wo gehört.Rekursiv verschachtelte URLs aus der Datenbank
Tabellenstruktur sieht wie folgt aus:
+-----+----------+------------+-------------+
| ID | ParentID | Name | Url |
+-----+----------+------------+-------------+
| 1 | 0 | Categories | categories |
| 34 | 1 | Movies | movies |
| 281 | 34 | Star Wars | star-wars |
| 33 | 1 | Books | a-good-book |
+-----+----------+------------+-------------+
Was ich will, ist zu tun, dass ich rekursiv in der Lage sein, durch alle Felder zu gehen, und nach dem ParentID, speichern alle möglichen url Kombinationen . So
, aus der Tabelle oben, ich möchte die folgende Ausgabe erhalten:
mysite.com/categories
mysite.com/categories/movies
mysite.com/categories/movies/star-wars
mysite.com/categories/books
mysite.com/categories/books/a-good-book
Ich habe angefangen, einen CTE schreiben, die aussehen wie folgt aus:
WITH CategoriesCTE AS
(
SELECT
Name,
Url,
ParentID,
ID
FROM myDB
WHERE ParentID = 1
UNION ALL
SELECT
a.Name,
a.Url,
a.ParentID,
a.ID
FROM myDB.a
INNER JOIN CategoriesCTE s on a.ParentID = s.ID
)
SELECT * FROM CategoriesCTE
Das Ding ist, Dieser Datenbankanruf speichert alles flach. Was ich tun müsste, ist, dass für jeden Schritt alle URLs gespeichert werden und dann für jede ID die URL entsprechend der ParentID gespeichert wird. Im Moment ist es natürlich nicht formatiert ist, aber meine Ausgabe ist rundweg so etwas wie:
mysite.com/categories
mysite.com/movies
mysite.com/star-wars
mysite.com/a-good-book
, die eine Menge defekte Links erstellt. Gibt es eine Möglichkeit, eine Aktion/Auswahl für jeden rekursiven Schritt auszuführen? Wie soll ich dieses Problem angehen?
Ist Ihre Datenstruktur korrekt? Die URL nach Kategorien hat Bücher, bevor sie eine bestimmte hat, aber in der ersten Tabelle, die Sie beschreiben, würde sie basierend auf der Beziehung direkt in Kategorien gehen? – Leonidas199x