Neu Fehler im Shop 5.8.0 verhindert kompletten Shopabgleich > Fix

erwin-weiss-gmbh

Mitglied
25. November 2025
23
3
Hallo zusammen,

wir hatten heute das Problem das die Kategorien nicht mehr richtig mit dem Shop abgeglichen wurden.
Nach längerer Suchen sind wir darauf gestoßen das der Shopabgleich über den Worker bei einem Punkt (Löschen eines Kunden) hängen bleibt.
Der Fehler liegt direkt im Shop in der Datei "/includes/src/Customer/Customer.php"

Hier wird versucht eine TEMPORARY-Tabelle innerhalb desselben Statements mehrfach zu referenzieren was MySQL nicht zulässt (ERROR 1137: Can't reopen table).
Sucht in der Datei die Folgende Stelle

$db->query(
'DELETE FROM tnewsletterempfaenger
WHERE kKunde ' . $chunkInClause . '
OR cEmail IN ' . $mailSubquery
);

und ersetzt sie durch

$db->query(
'DELETE FROM tnewsletterempfaenger
WHERE kKunde ' . $chunkInClause
);

$db->query(
'DELETE FROM tnewsletterempfaenger
WHERE cEmail IN ' . $mailSubquery
);

Das ist funktional gleich, verhindert aber den Fehler und den Abbruch des Shopabgleichs.
Danach läuft wieder alles normal.
 

NoOne

Sehr aktives Mitglied
16. März 2024
674
231
Das sollte mit MariaDB > 10.2 übrigens nicht passieren. Wenn also kein MySQL benutzt wird, dann sollte das auch nicht zwingend nötig sein. Das wird vermutlich auch von JTL gefixed, weil die MySQL-Kompatibilität eventuell gewahrt werden soll, aber MariaDB ist für den Shop eigentlich die bessere Wahl.
 

css-umsetzung

Offizieller Service Partner
SPBanner
6. Juli 2011
8.651
2.702
Berlin
Firma
css-umsetzung
Das sollte laut JTL Informationen so geändert werden:

in /includes/src/Customer/Customer.php

aus
PHP:
$db->query(
                    'DELETE FROM tnewsletterempfaenger
                    WHERE kKunde ' . $chunkInClause . '
                        OR cEmail IN ' . $mailSubquery
                );

wird
PHP:
$db->query(
    'DELETE tnewsletterempfaenger FROM tnewsletterempfaenger
    LEFT JOIN tmp_erase_customers ON tmp_erase_customers.kKunde = tnewsletterempfaenger.kKunde
        OR tmp_erase_customers.cMail = tnewsletterempfaenger.cEmail
    WHERE tmp_erase_customers.kKunde IS NOT NULL'
);
 

Ähnliche Themen