Neu Fehler-Log - Error executing query SELECT SUM

wo0dle

Sehr aktives Mitglied
6. Oktober 2015
147
32
Hallo Community,

in einem Shop 5.3.3 haben wir einen Fehler der mehrmals am Tag im Fehler-Log auftaucht, ich kann den Fehler leider nicht nachvollziehen wie dieser entsteht. Wahrscheinlich aber beim Artikel Filtern mit Merkmalen etc. Habt ihr sowas schon einmal gelöst?

Datenbankprüfung im Backend ist alles auf ok:
Anzahl Tabellen: 324
Anzahl modifizierter Tabellen: 0


Code:
Error executing query SELECT  SUM(ssMerkmal.anz0) AS anz0, SUM(ssMerkmal.anz1) AS anz1, SUM(ssMerkmal.anz2) AS anz2 FROM (SELECT COUNT(DISTINCT IF( < 20, tartikel.kArtikel, NULL)) AS anz0, COUNT(DISTINCT IF( < 25, tartikel.kArtikel, NULL)) AS anz1, COUNT(DISTINCT IF( < 30, tartikel.kArtikel, NULL)) AS anz2
            FROM tartikel
#JOIN from JTLFilterStatesBaseCategory::getSQLJoin
JOIN tkategorieartikel ON tartikel.kArtikel = tkategorieartikel.kArtikel
LEFT JOIN tartikelkategorierabatt ON tartikelkategorierabatt.kKundengruppe = 1 AND tartikelkategorierabatt.kArtikel = tartikel.kArtikel
LEFT JOIN tartikelsonderpreis ON tartikelsonderpreis.kArtikel = tartikel.kArtikel
                        AND tartikelsonderpreis.cAktiv = Y
                        AND tartikelsonderpreis.dStart = CURDATE())
LEFT JOIN tsonderpreise ON tartikelsonderpreis.kArtikelSonderpreis = tsonderpreise.kArtikelSonderpreis
                        AND tsonderpreise.kKundengruppe = 1

#join1 from JTLFilterItemsPriceRange::getOptions
JOIN (tpreis
#subjoin for tpreis table
JOIN tpreisdetail ON tpreisdetail.kPreis = tpreis.kPreis AND tpreisdetail.nAnzahlAb = 0) ON tpreis.kArtikel = tartikel.kArtikel
                    AND tpreis.kKundengruppe = 1

#join2 from JTLFilterItemsPriceRange::getOptions
LEFT JOIN tartikelsichtbarkeit ON tartikel.kArtikel = tartikelsichtbarkeit.kArtikel
                        AND tartikelsichtbarkeit.kKundengruppe = 1

 WHERE  tkategorieartikel.kKategorie IN (
                        SELECT tchild.kKategorie FROM tkategorie AS tparent
                            JOIN tkategorie AS tchild
                                ON tchild.lft BETWEEN tparent.lft AND tparent.rght
                                WHERE tparent.kKategorie = 2) AND tartikelsichtbarkeit.kArtikel IS NULL AND tartikel.kVaterArtikel = 0 AND  (tartikel.cLagerBeachten != Y
                    OR tartikel.fLagerbestand > 0
                    OR (tartikel.cLagerVariation = Y
                        AND (
                            SELECT MAX(teigenschaftwert.fLagerbestand)
                            FROM teigenschaft
                            INNER JOIN teigenschaftwert ON teigenschaftwert.kEigenschaft = teigenschaft.kEigenschaft
                            WHERE teigenschaft.kArtikel = tartikel.kArtikel
                        ) > 0
                    ) OR tartikel.cLagerKleinerNull = Y)
#default group by
GROUP BY tartikel.kArtikel

#limit sql
ORDER BY tartikel.dErstellt DESC, tartikel.cName ) AS ssMerkmal
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near < 20, tartikel.kArtikel, NULL)) AS anz0, COUNT(DISTINCT IF( < 25, tartikel.kA... at line 1
 
Zuletzt bearbeitet:

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.873
562
Die If() Funktion ist wie folgt definiert IF(expr1,expr2,expr3) und das bedeutet: Wenn expr1 TRUE ist, dann ist der Rückgabewert expr2, andernfalls expr3.

Aber expr1 ist gar keine Bedingung. Da fehlt noch was vor dem "kleiner als" Zeichen:

SELECT
SUM(ssMerkmal.anz0) AS anz0,
SUM(ssMerkmal.anz1) AS anz1,
SUM(ssMerkmal.anz2) AS anz2
FROM (SELECT COUNT(DISTINCT IF( < 20, tartikel.kArtikel, NULL)) AS anz0,...
 
  • Gefällt mir
Reaktionen: wo0dle

wo0dle

Sehr aktives Mitglied
6. Oktober 2015
147
32
Die If() Funktion ist wie folgt definiert IF(expr1,expr2,expr3) und das bedeutet: Wenn expr1 TRUE ist, dann ist der Rückgabewert expr2, andernfalls expr3.

Aber expr1 ist gar keine Bedingung. Da fehlt noch was vor dem "kleiner als" Zeichen:

SELECT
SUM(ssMerkmal.anz0) AS anz0,
SUM(ssMerkmal.anz1) AS anz1,
SUM(ssMerkmal.anz2) AS anz2
FROM (SELECT COUNT(DISTINCT IF( < 20, tartikel.kArtikel, NULL)) AS anz0,...
Vielen Dank für die Feststellung, wodurch könnte das verursacht werden im Shop?
 

NoOne

Sehr aktives Mitglied
16. März 2024
673
230
Das ist der Preisspannenfilter. Was dort in der Abfrage fehlt, sind die Steuersätze. Das passiert z.B. durch Bots/Crawler für die keine Session angelegt wird oder durch fehlende Steuerzonen oder Steuersätze für das vom Kunden gewählte Rechnungs-/Lieferland. Manchmal auch durch Plugins, wenn die was an der Session ändern und sich das was die da ändern als falsch entpuppt.
 
  • Gefällt mir
Reaktionen: wo0dle

Trigoda

Aktives Mitglied
8. September 2022
52
6
Das ist schon ein Bug, der JTL Shop sollte nicht fehlerhafte Queries an die Datenbank senden, sondern das vorher "abfangen"...

Hat einer von Euch bereits ein Supportticket erstellt, damit das in den Bugtracker aufgenommen wird?
 

Ähnliche Themen