Mysql
 sql >> Datenbank >  >> RDS >> Mysql

OpenCart:So füllen Sie oc_category_path genau aus

Wenn eine Kategorie in Ihrem OC-Speicher eine Root-Kategorie ist, erhält sie einen Eintrag in der Pfadtabelle als "category_id,category_id,0". Wenn diese Kategorie ein untergeordnetes Element hat, erhält sie zwei Einträge in der Tabelle, nämlich:-"category_id ,category_id,1" sowie "category_id,parent_id,0".

Wenn dieses Kind ein eigenes Kind hat, hat dieses neue Kind drei Einträge als solche:-
"category_id,category_id,2"
"category_id,parent_id,1"
"category_id,parents übergeordnete category_id,0"

Nehmen Sie zur Veranschaulichung an, dass eine Kategorie eine category_id von „14“ hat. Sie ist das erste Kind einer Kategorie mit einer category_id von „11“. Diese Kategorie mit der category_id von „11“ ist das Kind einer Kategorie mit der Kategorie ID von "1". (1>11>14 wie im Admin-Panel angezeigt, außer mit dem Namen anstelle der category_id)

Das obige wird 3 Einträge als solche haben:
"14","14","2"
"14","11","1"
"14","1" ,"0"

Die Stammkategorie erhält also 0, die nächste 1, die nächste 2 und so weiter, je nachdem, wie viele Kategorieebenen tiefer sie liegt.

Ich hoffe, das erklärt die Dinge gut genug.

Was das Füllen betrifft, ist die einfachste Methode, aber keine vollständige Methode, einfach die Tabelle mit "category_id,category_id,0" zu erstellen. Dadurch werden sie im Admin-Bereich angezeigt. Wenn Sie dann auf "Reparieren" klicken, wird diese Tabelle korrekt generiert.

Alternativ müssten Sie Ihre Kategorietabelle schrittweise durchgehen, ein Array mit seiner parent_id erstellen, diese parent_id nach ihrer parent_id suchen und sie dem Array hinzufügen und so weiter. Wenn das Array vollständig ist, dh keine Eltern mehr vorhanden sind, ist es eine einfache Aufgabe, sie mit dem richtigen "Level" zur Tabelle hinzuzufügen.

Zu Ihrer Information, es gibt noch eine weitere Tabelle, die ebenfalls gefüllt werden muss, category_to_store, die sehr einfach "category_id,store_id" ist. Ohne diese Tabelle sehen Sie Ihre Kategorien in Ihrem Shop nicht.