Versandkostenberechnung funktioniert nicht

Hallo zusammen,

wir haben ein Problem mit den Versandkosten.

Wir unterscheiden bei den Versandkosten nach 2 Kategorien. Prinzipiell betragen die Versandkosten für alle Artikel EUR 5.95 - ausgenommen davon sind Artikel aus den 6 unten abgefragten Kategorien (bei diesen beträgt das Porto EUR 9,50).

Unter ‘eigene Bedingungen’ bei den Versandkosten haben wir 2 unterschiedliche Abfragen (optional), die prinzipiell funktionieren und die im Warenkorb Artikel mit günstigem Versand und Artikel mit teurem Versand auch erfolgreich filtern / zuordnen.

  1. Option:

    MIN((SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND categoryID IN (“11167”, “11168”, “11231”, “11232”, “11233”, “11234”) AND articleID NOT IN (“33593”, “33595”))) AS kategorie, MAX((SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND categoryID IN (“11167”, “11168”, “11231”, “11232”, “11233”, “11234”) AND articleID NOT IN (“33593”, “33595”))) AS kategorie

  2. Option:

    MIN((SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND (categoryID=“11167” OR categoryID=“11168” OR categoryID=“11231” OR categoryID=“11232” OR categoryID=“11233” OR categoryID=“11234”))) AS kategorie

ABER: es funktioniert nur mit Artikeln die genau EINER der abgefragten Kategorien zugeordnet sind. Bei Artikeln, die mehreren der abgefragten Kategorien zugeordnet sind, wirft der Shop einen Fehler; bzw. der Warenkorb lädt unendlich.

Kann man in diese(n) Abfragen etwas einbauen, damit Artikel, die in 2 oder mehreren Kategorien sind, auch noch erfolgreich abgefragt und zugeordnet werden?

Vielen Dank für Eure Hilfe

Liebe Grüsse

Bernd

Ich würde mir die entsprechenden Artikel in der Tabelle s_articles_attributes markieren und dann

MAX(at.dein_attribut) in den Versandkosten abfragen.

Das SQL finde ich sehr unleserlich zudem heißen zwei Spalten in option1 kategorie, jede Spalte muss eindeutig benannt werden. Da die ID Felder numerisch sind, würde ich die Hochkomma’s weglassen.

Und jetzt noch ein Schuss ins Blaue: vielleicht hilft ein “group by” derart:

SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND categoryID IN (11167, 11168, 11231, 11232, 11233, 11234) AND articleID NOT IN (33593, 33595) group by articleID

 

Hallo Sacrofano,

vielen Dank für Deine schnelle Antwort und Deine Vorschläge.

Wir haben es jetzt folgendermassen gelöst und es scheint zu funktionieren:

Limit 1 ist offensichtlich der Trick, damit sich der Warenkorb nicht unendlich lädt:

MIN((SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND (categoryID="11167" OR categoryID="11168" OR categoryID="11231" OR categoryID="11232" OR categoryID="11233" OR categoryID="11234") AND articleID !="33593" AND articleID !="33595" LIMIT 1)) AS kategorie

Gruss

Bernd