Produkte mit Attribut zählen

Hallo,

wie ich Produkten Attribute zuordne und Bedingungen setze, habe ich mithilfe der Doku bereits gelernt. Ich habe zwei Artikel verschiedener Attribute und möchte hierfür eine Mischkorb-Versandregel einrichten (Bedingung: Attribut1=“1”, Attribut2=“1”. 

  1. Produkt 1 (Attribut 1)
  2. Produkt 2 (Attribut 2)

Ist es irgendwie möglich, alle Produkte mit Attribut 1 zu zählen sowie alle mit Attribut 2 zu zählen, um damit rechen zu können? Folgende Formel habe ich bereits getestet und sie funktioniert nicht:

MAX(at.attribut1 * 0.6 + 13.3) + SUM(at.attribut2 * 0.6 + 13.3)

Shopware rechnet zwar, aber leider falsch. Er multipliziert Attribut 1 und 2 jeweils nur 1 mal mit dem Rest. Selbst wenn ich davon mehrere Produkte im Warenkorb liegen habe.

 

Hallo,

das funktioniert nicht mit Fliesskommazahlen. Schreib besser statt 0.6 -> 6/10 oder 60/100

1 „Gefällt mir“

@paddyuboot schrieb:

Hallo,

wie ich Produkten Attribute zuordne und Bedingungen setze, habe ich mithilfe der Doku bereits gelernt. Ich habe zwei Artikel verschiedener Attribute und möchte hierfür eine Mischkorb-Versandregel einrichten (Bedingung: Attribut1=„1“, Attribut2=„1“. 

  1. Produkt 1 (Attribut 1)
  2. Produkt 2 (Attribut 2)

Ist es irgendwie möglich, alle Produkte mit Attribut 1 zu zählen sowie alle mit Attribut 2 zu zählen, um damit rechen zu können? Folgende Formel habe ich bereits getestet und sie funktioniert nicht:

MAX(at.attribut1 * 0.6 + 13.3) + SUM(at.attribut2 * 0.6 + 13.3)

Shopware rechnet zwar, aber leider falsch. Er multipliziert Attribut 1 und 2 jeweils nur 1 mal mit dem Rest. Selbst wenn ich davon mehrere Produkte im Warenkorb liegen habe.

 

Schau dir mal die Definition der function max() in mysql an (mysql-Dokumentation oder eines der zahlreichen Tutorials). Sie gibt den größten Wert in der „Spalte“ an, die  in der Klammer steht. Und dieses Ergebnis entspricht doch deiner Beschreibung der „falschen Rechnung“ für max(), falls ich dich richtig verstanden habe.  

count () zählt, sum() summiert, max() gibt den Maximalwert aller Zeilen der Spalte usw. 

 

1 „Gefällt mir“

Hallo,

zunächst vielen Dank für die Antworten. Diese helfen mir aber nur bedingt weiter: der Einsatz der Funktion MAX() war natürlich schwachsinnig. 

Ich habe es nun ausgetestet:

COUNT(at.attribut1 * 0.6 + 13.3)

Gibt garkeinen Wert aus, die Versandkosten bleiben also bei Null.

SUM(at.attribut1 * 0.6 + 13.3)

Gibt zwar einen Wert aus, aber einen falschen. Egal wie viele Produkte des Attributs “Attribut1” im Warenkorb liegen. Er multipliziert immer mit 1.

@paddyuboot schrieb:

Hallo,

zunächst vielen Dank für die Antworten. Diese helfen mir aber nur bedingt weiter: der Einsatz der Funktion MAX() war natürlich schwachsinnig. 

Ich habe es nun ausgetestet:

COUNT(at.attribut1 * 0.6 + 13.3)

Gibt garkeinen Wert aus, die Versandkosten bleiben also bei Null.

SUM(at.attribut1 * 0.6 + 13.3)

Gibt zwar einen Wert aus, aber einen falschen. Egal wie viele Produkte des Attributs „Attribut1“ im Warenkorb liegen. Er multipliziert immer mit 1.

 

Dir fehlen einfach Grundlagen im Verständnis der Versandkostenberechnung in Shopware und in der Erstellung von SQL-Abfragen. In der Summe gehst Du dann falsche Wege. 

Wenn Du eine Frage zu den Versandkosten im Forum stellst, solltest Du
a) exakt beschreiben, was Du erreichen möchtest und
b) an welchen Stellen im Backend du Änderungen/Einstellungen vorgenommen hast.  

Dann muss man sich das nicht immer zusammenreimen, ob Du die SQL-Abfrage erweiterst oder eine eigene Berechnung einträgst. 

Dein Count-Statement ist sinnfrei. Wo soll der Datenbankserver denn den Wert in der Klamemr finden und zählen? Das Ergebnis des  Aggregate Expression existiert doch in der SQL-Abfrage respektive der Datenbank überhaupt nicht. Daher ergibt count ()  auch den Wert 0. Das ist als Ergebnis korrekt.

SUM würde  die einzelnen Zeilen des Warenkorbs (=Artikel) und dort den Wert , der sich aus der Klammer ergibt , summieren. In jeder Zeile (Artikel) ist der Wert 1 oder 0 und damit wird multipliziert. Kommt jetzt auch darauf an, wo Du es einsetzt, das hast Du jetzt ja auch nicht geschrieben.

Ich hoffe, du findest mit den Angaben und den Tutorials im Netz einen Einstieg, der dich zum Erfolg führt. Ich unterbreiten dir auch gerne ein Angebot zur Erstellung der Versandkostenberechnung - einfach eine PM mit Kontaktdaten schicken. 

1 „Gefällt mir“

@hth schrieb:

Dir fehlen einfach Grundlagen im Verständnis der Versandkostenberechnung in Shopware und in der Erstellung von SQL-Abfragen. In der Summe gehst Du dann falsche Wege.

Daher wende ich mich ja an das Forum (nach dem Lesen der Doku). Um es leicht verständlich und kurz zu erklären: Ich möchte zählen, wie viele Produkte mit Attribut XY im Warenkorb sind und mit diesem Ergebnis in einer eigenen Berechnung weiterrechnen.

        

 

Wen es interessiert, die Lösung ist:

SUM(at.attribut1*b.quantity)+(SUM(at.attribut2*b.quantity)