php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-01-2012, 14:15
cora
 Registrierter Benutzer
Links : Onlinestatus : cora ist offline
Registriert seit: Jan 2012
Beiträge: 3
cora befindet sich auf einem aufstrebenden Ast
Standard Datenbankabfragen entwerfen

Hallo,

nicht nur neu im Forum, auch komplett Newbie in php und mysql will (und muß) ich nun doch mal anfangen mich mit dieser Materie zu beschäftigen. Bisher war ich mit css und html "ausgelastet", doch das reicht nun nicht mehr.
Das Problem: ich muß in einem onlineshop Versandregeln erarbeiten.
Nun kann es ein, das ich hier vollkommen falsch bin, dann bitte nicht meckern, einfach ignorieren
Also die verwendete Software ist shopware 3.5.6 wem das was sagt.
Die einfachen Regeln dort über Gewicht, Anzahl, Artikelpreis sind nicht verwendbar, doch die Option "eigene Berechnung" soll es bringen.
Jedenfalls ist die zu erstellende Formel ziemlich komplex, da einige Bedingungen umgesetzt werden müssen.
Bei den Shop-Artikeln lassen sich Attribute (Datenbankfelder) mit den Feldtypen boolean, text und textarea erstellen, die dann in der Berechnung abgefragt werden.

Um die Gestalt der Formel zu verstehen, erkläre ich am besten konkret anhand dem was da rauskommen soll:
Es gibt insgesamt vier Versandkostenpreise (diese dann noch in drei Länderzonen), wobei im Falle des Kombinationskaufs der höchste Preis je nach Artikelgruppe bezahlt werden soll. Allerdings mit einer Ausnahme die die ganze Sache verkompliziert.
Also, für die Länderzone1 soll gelten:
Artikelgruppe 1 - 2,50€
Artikelgruppe 2 - 6,50€
Artikelgruppe 2** ebenfalls 6,50€
Artikelgruppe 3 - 9,50€ und jetzt kommt die Ausnahme:
Alle Artikel lassen sich gemeinsam verschicken, nur Artikel der Artikelgruppe 2** lassen sich nicht zusammen mit den Artikeln aus Gruppe 3 versenden und es kommt zwangsläufig zu zwei zu versendenden Paketen. Das wiederum führt zum Versandpreis 13,00€
Allerdings Artikelgruppe 2 und Artikelgruppe 2**gehen gemeinsam, auch Artikelgruppe 1 und Artikelgruppe 2** gehen gemeinsam.

ein paar Beispiele:
Artikelgruppe 1 + Artikelgruppe 2 = 6,50€
Artikelgruppe 1 + Artikelgruppe 3 = 9,50€
Artikelgruppe 1 + Artikelgruppe 2 + Artikelgruppe 2** = 6,50€
Artikelgruppe 3 + Artikelgruppe 2** = 13,00€

Hinzugefügt sei, dass jede Länderzone eine eigene Versandart darstellt und damit eine eigene Formel erhält, die sich nur in den eingefügten Preisen unterscheidet (denke ich jedenfalls )

Nun habe ich mir gedacht, dass man das mit einer logischen Formel verknüpfen kann.
Doch ich weiß nicht, lassen sich logische sql-Befehle und die Preise in eine Formel gemeinsam hineinschreiben?
Vorausgesetzt, das geht, dann würden die anzulegenden Attribute (Datenbankfelder) vom Typ "boolean" sein müssen und den Artikelgruppen s.o. entsprechen.
Bei der Anlage eines neuen Artikels bekäme er dann bei dem für ihn zutreffenden Attribut den Haken in die Checkbox.

Die Formel müßte vom Aufbau her wahrscheinlich zwei Hauptteile haben und vielleicht logisch so ungefähr aussehen:
im ersten Teil der Formel wird ermittelt welches ist der höchste Preis der Kombination, der wird erstmal genommen, in der Art "Artikelgruppe1 UND Artikelgruppe2 UND Artikelgruppe3 -->DANN 9,50€ und im zweiten Teil müßte die Sonderbedingung abgefragt werden: "WENN Artikelgruppe3 UND Artikelgruppe2** -->DANN 13,00€"

Nun hoffe ich auf Hilfe, bitte nicht zu sehr insidermäßig antworten, ich stehe wirklich am Anfang in dieser Materie.
Schonmal vielen Dank im voraus ,

Cora
Mit Zitat antworten
  #2 (permalink)  
Alt 26-01-2012, 13:19
cora
 Registrierter Benutzer
Links : Onlinestatus : cora ist offline
Registriert seit: Jan 2012
Beiträge: 3
cora befindet sich auf einem aufstrebenden Ast
Standard

Wie es aussieht, ist mein Thema wohl nicht richtig aufgehoben in dieser Rubrik.
Vielleicht hat jemand einen Tipp, wie ich an die Lösung herangehen könnte, oder wer da evtl. ein kompetenter Helfer sein könnte.
Mit Zitat antworten
  #3 (permalink)  
Alt 27-01-2012, 00:50
hostbar_danny
 Registrierter Benutzer
Links : Onlinestatus : hostbar_danny ist offline
Registriert seit: Feb 2011
Beiträge: 66
hostbar_danny befindet sich auf einem aufstrebenden Ast
Standard

Hallo Cora,

ich hoffe ich habe dein Problem verstanden und eine passende Lösung für dich parat, denn solch eine Anforderung mussten wir bislang noch nicht umsetzen.

Zuerst einmal, wie speicherst du die Artikelgruppe? Sind das Kategorien oder ein eigenes Artikel Attributsfeld ?
Ich gehe jetzt mal von einem eigens angelegten Attributsfeld mit dem Datenbanknamen attr1 aus.

Dieses Feld kann folgende Werte annehmen:

1: für Artikel aus Gruppe 1
2: für Artikel aus Gruppe 2
4: für Artikel aus Gruppe 2*
8: für Artikel aus Gruppe 3

Dies hat den Grund, dass sich damit recht leicht binär rechnen lässt.

Nun zur Regel. Da gibt es bestimmt eine einfachere/elegantere Lösung, aber folgende sollte funktionieren.

Ich bin her gegangen und hab mir überlegt, welche Kombinationen zu stande kommen können. Folgende sollten alle Fälle abdecken:

nur aus Gruppe 1 = 2,50
aus (Gruppe 2 oder Gruppe 2*), aber nicht 3 = 6,50
aus Gruppe 3, aber nicht 2* = 9,50
aus Gruppe 2* und Gruppe 3

Ich weiß nicht wieviel Ahnung du von Aussagenlogik hast, aber das sollte (sofern ich hoffentlich nichts vergessen habe) alles abdecken.

Es sind so wenig Gruppen, da z.B. Gruppe 1 bis auf den Fall das im Warenkorb nur Artikel aus dieser Gruppe sind vollkommen irrelevant ist.

Nun lässt sich in der Berechnungsregel mit SUM(at.attr1) die Summe aus den Gruppen bekommen. Machen wir ein Beispiel wir haben im Warenkorb folgende Artikel:

Gruppe 1 und Gruppe 3 = 1 + 8 = 9 = (binär) 1001
oder
Grupp 2* und Gruppe 3 und Gruppe 2 = 2 + 4 + 8 = 14 = (binär) 1110

Man sieht an den Binären stellen also sofort welche Artikelgruppen enthalten sind.

Jetzt kann man mit einem bitweisen AND prüfen ob eine Artikelgruppe enthalten ist. Ich bilde also einfach alle oben genannten fälle ab:

Code:
IF(SUM(at.attr1) = 1, 2.5, 
	IF((SUM(at.attr1)&2 OR SUM(at.attr1)&4) AND !(SUM(at.attr1)&8), 6.5,
		IF((SUM(at.attr1)&8) AND !(SUM(at.attr1)&4), 9.5,
			IF(SUM(at.attr1)&4 AND SUM(at.attr1)&8, 13, 99)
		)
	)
)
Die 99 gilt als Fallback Lösung, die eigentlich nicht eintreten sollte, nur wenn ich einen Fehler gemacht habe

Für andere Länder würde ich einfach eine zweite Versandart anlegen, die nur in dem entsprechenden Land gilt und andere Zahlenwerte enthält.


So nun hab ich doch schon die ausführliche Antwort geschrieben, wollte dich eigentlich auf morgen vertrösten weil es doch schon recht spät ist, aber hat mich selbst interessiert

Gruß Danny

Geändert von hostbar_danny (27-01-2012 um 00:55 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 27-01-2012, 10:22
cora
 Registrierter Benutzer
Links : Onlinestatus : cora ist offline
Registriert seit: Jan 2012
Beiträge: 3
cora befindet sich auf einem aufstrebenden Ast
Standard

Hallo Danny,
ui, das ist ja schon ein ganz schöner Schritt. Find ich klasse, dass du dich so hineingedacht hast und bei dieser wohl nicht so einfachen Sache helfen willst.

Du hast das ganze Problem sehr gut verstanden.,

Das zusätzliche Attributfeld wird in den Artikeleinstellungen hinzugefügt, nach deiner Beschreibung habe ich als Feldtyp "text" gewählt.
Die 1 - 2 - 4 - 8 leuchtet mir ein, inwieweit dann die logischen Verknüpfungen alles abdecken, soweit reichts bei mir nicht, aber zumindest verstehe ich das Prinzip.

Nun habe ich bereits alles wie ich es verstehe entsprechend konfiguriert, als Versandpreis erscheint allerdings immer 0.

Was ich also getan habe:
Zuerst das Attribut angelegt, vorn stehen die Auswahlfelder, dahinter was ich eingetragen bzw. ausgewählt habe.
Eindeutiger Name (attr[1] bis attr[20]): attr[6]
Standardwert:
Typ des Feldes (boolean, text, textarea) : text
Name des Feldes: Danny
Auswahl erzwingen: Nein
Position:: 0
Datenbank-Feld (attr1 bis attr20): attr6
Eingabe für Varianten möglich: 1
Hilfetext Eingabe:
Multilanguage: ja

Das Attribut #6 habe ich genommen, da bereits 1 - 5 existieren.

Danach habe ich eine Versandart angelegt, Typ "eigene Berechnung", dort habe ich bei den "erweiterten Einstellungen" im Feld "eigene Versandkostenberechnung" deinen code reinkopiert, dabei von Attribut #1 auf #6 geändert.
Dann habe ich bei vier Artikeln im neuen Attribut jeweils die 1 - 2 - 4 - 8 eingetragen.
Siehst du auf Anhieb einen Fehler?
Würde mich freuen, du würdest noch weiter dranbleiben können, ich glaube es ist schon ziemlich weit was die Lösung angeht.

Grüße
Cora
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Codeigniter Mehrere Datenbankabfragen =delme= PHP Developer Forum 2 12-02-2009 16:45
Datenbankabfragen Zocker SQL / Datenbanken 2 07-09-2006 18:04
Datenbankabfragen Davidt SQL / Datenbanken 10 14-07-2006 23:32
Datenbankabfragen KickASS PHP Developer Forum 2 07-03-2005 09:00
Wer hat Bock eine XML Klasse zu entwerfen ? compuboy1010 Projekthilfe 0 08-04-2004 14:20

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:49 Uhr.