# Kategoriebaum neu aufbauen

**URL:** https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628
**Category:** Administration
**Created:** [7. September 2016 um 10:30 UTC](https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628 "2016-09-07T10:30:47Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![exwe](https://avatars.discourse-cdn.com/v4/letter/e/3d9bf3/32.png) [@exwe](https://forum.shopware.com/u/exwe)
#### Post date: [7. September 2016 um 10:30 UTC](https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628/1 "2016-09-07T10:30:47Z")

</div>

Hallo Leute,

diese Frage geht wohl vorallem an Shopware selbst.

Seht ihr ein Problem darin, dass man alle paar Stunden den Kategoriebaum von Hand neu aufbaut?  
Wir haben zur Zeit wohl eine Schnittstelle, die verpennt in die s\_articles\_categories\_ro beim hinzufügen von Artikeln die zusätzlichen Verbindungen einzupflegen.

Das führt dann zu einem Fehler, den ich hier beschrieben hatte: [Shopware Issuetracker](https://issues.shopware.com/#/issues/PT-6583)  
Wenn man den Kategoriebaum neu aufbaut wird die s\_articles\_categories\_ro neu genriert und der Fehler ist weg.

Meine Frage wäre hier einfach, ob der Neuaufbau irgendwelche Nachteile haben könnte?  
Dauerhaft soll natürlich die Schnittstelle alles vernünftig eintragen.

Gruß Yuri

---

<div class="post-metadata">

### Author: ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)
#### Post date: [7. September 2016 um 10:35 UTC](https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628/2 "2016-09-07T10:35:12Z")

</div>

Die Funktion ist eigentlich nicht für die Herstellung der Zuordnung in der s\_articles\_categories\_ro gedacht, sondern vielmehr um den Kategoriebaum zu reparieren. In diesem Fall wäre die Funktion erstmal „zweckentfremdet“ da natürlich der aufbau der categories\_ro ein Nebeneffekt ist. Allerdings sind die Querrys nicht performant und nicht für den ständigen Gebrauch gedacht. Als Übergangslösung kann das funktionieren, sollte aber in der Schnittstelle gefixt werden.

&nbsp;

---

<div class="post-metadata">

### Author: ![exwe](https://avatars.discourse-cdn.com/v4/letter/e/3d9bf3/32.png) [@exwe](https://forum.shopware.com/u/exwe)
#### Post date: [7. September 2016 um 12:23 UTC](https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628/3 "2016-09-07T12:23:46Z")

</div>

> [@Moritz Naczenski schrieb:](https://forum.shopware.com/profile/14574/Moritz%20Naczenski "Moritz%20Naczenski")
> 
> Die Funktion ist eigentlich nicht für die Herstellung der Zuordnung in der s\_articles\_categories\_ro gedacht, sondern vielmehr um den Kategoriebaum zu reparieren. In diesem Fall wäre die Funktion erstmal „zweckentfremdet“ da natürlich der aufbau der categories\_ro ein Nebeneffekt ist. Allerdings sind die Querrys nicht performant und nicht für den ständigen Gebrauch gedacht. Als Übergangslösung kann das funktionieren, sollte aber in der Schnittstelle gefixt werden.

Hallo Herr Naczenski,

danke für Ihre Antwort. Dazu noch einmal die Nachfrage, da wir mittlerweile auch nicht mehr sicher sind ob es an der s\_articles\_categories\_ro liegt:

Fakt ist, wenn man den Baum neu aufbaut, geht alles wieder.  
Was für Tabellen nimmt sich die Funktion Kategoriebaum neu aufbauen, denn im Detail vor?

Und hätten Sie eine Idee wie man das mit der zerschossenen Suchfunktion zusammenbringen kann? Das hängt irgendwie direkt miteinader zusammen.

Gruß aus Dortmund

&nbsp;

&nbsp;

---

<div class="post-metadata">

### Author: ![erawpohs](https://avatars.discourse-cdn.com/v4/letter/e/f17d59/32.png) [@erawpohs](https://forum.shopware.com/u/erawpohs)
#### Post date: [30. September 2016 um 09:00 UTC](https://forum.shopware.com/t/kategoriebaum-neu-aufbauen/39628/4 "2016-09-30T09:00:15Z")

</div>

Hallo exwe,

ich habe mir für meinen Import das unten stehende SQL-Skript gebaut, welches die s\_articles\_categories\_ro wieder korrigiert. Damit tauchen bei mir keine “Ups! Ein Fehler ist aufgetreten!” mehr auf ![Grin](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/70033cde8e8ff79cfa538293ae71318d6f788423.png "Grin")

Wenn es dennoch Probleme geben sollte: Unter [http://community.shopware.com/files/downloads/kategorie-doku-12972014.pdf](http://community.shopware.com/files/downloads/kategorie-doku-12972014.pdf) ist die Tabelle beschrieben.

```
-- Zu jeder Kategorie-ID alle im Baum übergeordneten IDs (inkl. der eigenen ID holen) als pathid holen
-- Also für 110 mit path |104|102|6|3|
-- id	pathId
-- 110	110
-- 110	104
-- 110	102
-- 110	6
-- 110	3
create temporary table cat_pathIds
	select id, pathId from (
		select id, path, id as pathId from s_categories where path is not null
		union select id, path, 0+SUBSTRING_INDEX(path,'|',1) pathId from s_categories where path is not null
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',2),'|',-1) pathId from s_categories
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',3),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',4),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',5),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',6),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',7),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',8),'|',-1) pathId from s_categories 
		union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',9),'|',-1) pathId from s_categories 
	) pathIds where pathId > 0
;

-- Die neue s_articles_categories_ro (ohne ids) erstellen
create temporary table RECREATED_articles_categories_ro
	select s_articles_categories.articleID, pathIds.pathId as categoryID, 
			s_articles_categories.categoryID as parentCategoryID 
		from s_articles_categories
		inner join cat_pathIds as pathIds on (s_articles_categories.categoryID = pathIds.id and pathIds.pathId > 0)
	order by articleID, parentCategoryID, categoryID ;

-- Alte Einträge entfernen
truncate s_articles_categories_ro;
-- Korrigierte Einträge ablegen
INSERT INTO s_articles_categories_ro
	(articleID,categoryID,parentCategoryID)
(
	SELECT RECREATED_articles_categories_ro.articleID,
		RECREATED_articles_categories_ro.categoryID,
		RECREATED_articles_categories_ro.parentCategoryID
	FROM RECREATED_articles_categories_ro
);

```

Achtung: Die Quelltextdarstellung macht z.B. aus “\>” “\>”, also bei der Übernahme noch mal auf HTML-Entities kontrollieren!

Hinweis: Die alten s\_articles\_categories\_ro.id bleiben nicht erhalten, aber darauf scheint es in Shopware keine Verweise zu geben, weswegen eine etwas aufwendigere Variante des Skript mit Erhalt der IDs wohl nicht notwendig ist.

Für mehr Ebenen muss man nur entsprechend viele unions ergänzen:

```
union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',10),'|',-1) pathId from s_categories 
union select id, path, 0+SUBSTRING_INDEX(SUBSTRING_INDEX(path,'|',11),'|',-1) pathId from s_categories 
[...]

```

Viele Grüße
