Neu [Bug] doppelte Weiterleitungseinträge, tredirect

forumjtlolshopag

Sehr aktives Mitglied
6. Juni 2018
614
163
Uns ist aufgefallen, dass das Shopsystem doppelte Weiterleitungseinträge erzeugt. Wir haben teiwleise bestimmte Links schon umgeleitet aber aus irgendeinem Grund, legt das System diese teilweise nochmal neu an. DAdurch haben wir gleiche cFromUrls mit unterschiedlichen Zielen. Wenn wir da z.B. schon ein Ziel hinterlegt haben, kann es passieren, das durch die Doppelung eines am Ende greift, welches noch kein Ziel bekommen hat.

Über die Datenbank bekommen wir ganz schnellr aus, welche Einträge betroffen sind. Innerhalb von 1-2 Stunden haben sich bei uns nach der Säuberung neue Doppelungen eingeschlichen:
Code:
SELECT r.kRedirect, r.cFromUrl, r.cToUrl, r2.cToUrl
FROM `tredirect` r
LEFT JOIN `tredirect` r2 ON r.cFromUrl=r2.cFromUrl AND r2.cToUrl!=''
WHERE r.cToUrl='' AND r2.cToUrl IS NOT NULL

Wir sind ursprünglich von einem xt:Commerce System zum JTL gewechselt und haben schön brav alle Weiterleitungen hinterlegt. Die, die sich dopplen scheinen auf dem ersten Blick die alten Urls aus dem alten System zu sein. Kann natürlich auch sein, das diese noch relativ häufig aufgerufen werden, weil der Umzug noch nicht allzulang her ist.

Wir sind aktuell auf Version: JTL Shop 4.06 Build 11, Apache, PHP 7.0.33

Wir haben zusätzlich noch ein Ticket gestellt.

Edit: Rückmeldung vom Support folgendes säubert die Tabelle und setzt die From Spalte auf Unique damit keine weiteren doppelten Einträge erzeugt werden:
Code:
-- Alle Duplikate löschen, die kein cToUrl gesetzt haben (nur die mit cToUrl bleiben stehen)
DELETE r2 FROM tredirect r1 JOIN tredirect r2 ON r2.cFromUrl = r1.cFromUrl WHERE r1.cToUrl != '' AND r2.cToUrl = '';
-- sofern noch Duplikate übrig sind, nur den Eintrag mit kleinstem kRedirect stehen lassen
DELETE r2 FROM (SELECT min(ri2.kRedirect) AS kRedirect, ri2.cFromUrl FROM tredirect ri1 JOIN tredirect ri2 ON ri2.cFromUrl = ri1.cFromUrl WHERE ri1.kRedirect != ri2.kRedirect GROUP BY ri2.cFromUrl) r1 JOIN tredirect r2 ON r2.cFromUrl = r1.cFromUrl WHERE r1.kRedirect != r2.kRedirect;
-- Unique auf cFromURL legen, um künftige Duplikate zu vermeiden
ALTER TABLE `tredirect` ADD UNIQUE( `cFromUrl`);
 
Zuletzt bearbeitet:

Ähnliche Themen