SQL-Script ergänzen
dobra
- datenbank
0 RK0 dobra0 Vinzenz Mai0 dobra
Hallo,
Ich habe mal wieder ein schwer zu beschreibendes Problem...
Mein Shop-System arbeitet mit einer Art Framework-Perl (glaube zumindest, daß das so heißt?)
Die Fakten:
Ich habe ein Tabellenspalte "MYPREIS" in der kundenspezifische Preise in Form von "Artikelnummer1:Preis1;Artikelnummer2:Preis2; usw" eingetragen sind.
Wenn sich der Kunde im Shop einloggt, werden "seine" (in diesem Feld eingetragenen) Preise angezeigt und berechnet.
Das Script, das das macht, schaut so aus:
<!--spmacro:module(Callback)
sub modify_db_price() {
my $p = $_[0];
my $artid = $_[1];
if($main::userid){
my $pre = ssp::db_get_prefix();
my $USERT = $pre . "USR";
ssp::readSQLData("SELECT MYPREIS FROM $USERT WHERE LOGIN='$main::userid'","MYPREIS");
my $user_p = ssp::get_var_db('MYPREIS', 0);
if($user_p ne $ssp::undefined && $user_p ne ""){
if($user_p =~ m/$artid:([^;]*);/){
return $1;
}
else
{
return $p;
}
}
else
{
return $p;
}
}
else
{
return $p;
}
}
-->
Mein Problem ist jetzt, daß in meinem Shop keine *Artikel* sondern Varianten eines Artikels bestellt werden können.
Ich kann natürlich in dem "MYPREIS" Feld auch Varianten-Artikelnummern angeben, aber da 1 Artikel bis zu 80 Varianten hat, wäre das SEHR aufwendig.
Die Varianten zu einem Artikel kann ich mit
my $SITM = $pre . "SITM";
ssp::readSQLData("SELECT ITEMID FROM $SITM WHERE MITEMID='$artid'","ITEMID");
abfragen.
Ich krieg's aber einfach nicht hin, das Script so anzupassen, daß zu einer in MYPREIS eingetragenen Arikenummer auch der Preis der zugehörigen Varianten modifiziert wird :'(
Kann mir da bitte jemand helfen?
Falls das von Bedeutung ist: meine DB ist eine mySQL DB (MySQL-Client-Version: 5.0.45)
Hallo Dobra,
erzähl uns etwas mehr von dem was Du vorhast.
Aus diesen beiden Sätzen werde ich noch nicht schlau:
Ich kann natürlich in dem "MYPREIS" Feld auch Varianten-Artikelnummern angeben, aber da 1 Artikel bis zu 80 Varianten hat, wäre das SEHR aufwendig.
Ich krieg's aber einfach nicht hin, das Script so anzupassen, daß zu einer in MYPREIS eingetragenen Arikenummer auch der Preis der zugehörigen Varianten modifiziert wird :'(
Hast Du die Varianten eines Artikels in der Datenbank? Sind sie verknüpft mit dem Artikel?
Beispiel:
Tabelle Artikel-Informationen
Inhalt: Artikelnummer, Artikel-Details, Artikelpreis
Tabelle Varianten-Informationen
Inhalt: Nummer der Variante, Details zur Variante, Nummer des Artikels von dem es eine Variante ist, Preis der Variante
Dann sollte es möglich sein, daß zu tun, was Du schreibst: Den Preis der Variante zu modifizieren, in Verbindung mit dem Preis des Artikels:
UPDATE Tabelle Varianten-Informationen SET Preis der Variante = Artikelpreis WHERE Nummer des Artikels von dem es eine Variante ist = Artikelpreis
Hilft Dir das weiter?
also ich habe eine
Tabelle: E02_USR (Kundendaten)
Spalten: (die hier nicht relevanten Spalten schreibe ich nicht auf)
KUNDENNR = diese Kundennummer wird - wenn Kunde eingeloggt ist - mit "$main::userid" abgefragt
MYPREIS = hier werden die NUR FÜR DIESEN KUNDEN gültigen Preise eingetragen
(Artikelnummer:Preis; wie oben beschrieben)
Tabelle: E02_ITEM (Artikeldaten)
Spalten:
ITEMID = Arikelnummer des Hauptartikels
PRICE = Preis der im Shop "normal" (also für nicht eingeloggte Kunden) angezeigt und berechnet wird
Tabelle: OP2_SITM (Artikelvarianten)
Spalten:
ITEMID = Varianten-Artikelnummer
MITEMID = die Artikelnummer des Hauptartikels (=> ITEMID in Tabelle ITEM)
PRICE = Preis der Variante (ist bei mir immer der selbe wie der Preis des Hauptartikels)
Die Variantenartikelpreise dürfen aber NUR FÜR DIESEN Kunden wenn er eingeloggt ist modifiziert werden!
(so wie es mit dem Script für den Hauptartikel funktioniert)
Mit UPDATE würde ich ja - wenn ich da jetzt nicht einen Gedankenfehler mache - dann die Preise für alle ändern?
d.h. die Bedingung für das modifizieren den Variantenpreise ist, daß 1) der Kunde eingeloggt ist und 2) der Hauptartikel mit "seinem" Preis im MYPREIS steht.
hoffe, ich konnte das Problem halbwegs verständlich beschreiben?
schon mal vorab vielen Dank für den Versuch, mir zu helfen, aber meine SQL-Kenntnisse reichen da leider bei weitem nicht...
mfG
dobra
Hallo
MYPREIS = hier werden die NUR FÜR DIESEN KUNDEN gültigen Preise eingetragen
(Artikelnummer:Preis; wie oben beschrieben)
das ist ein denkbar schlechtes Tabellendesign. Ändere dies.
Lege Dir für Die Artikelpreise *aller* Kunden eine Tabelle an:
Freundliche Grüße
Vinzenz
Hallo
MYPREIS = hier werden die NUR FÜR DIESEN KUNDEN gültigen Preise eingetragen
(Artikelnummer:Preis; wie oben beschrieben)das ist ein denkbar schlechtes Tabellendesign. Ändere dies.
Lege Dir für Die Artikelpreise *aller* Kunden eine Tabelle an:
- Verweis auf den speziellen Artikel
- Verweis auf den speziellen Kunden
- Preis, den für diesen Artikel und diesen Kunden gültig ist.
hmmm, die Tabellen werden von Shop-Programm automatisch generiert
so, wie Du geschrieben hast, könnte ich es schon machen.
Allerdings geht das nur, wenn ich für jeden Kunden, der spezielle Preise ausgehandelt hat, einen eigenen Subkatalog anlege.
Da ich aber insesamt nur 15 Subkataloge zur Verfügung habe und davon schon 6 für Zusatzmodule fix belegt sind, ist das SO nicht machbar :(
Es geht nur über die sub modify_db_price() Funktion
(also EINE allgemein gültige Preistabelle und eben die Preise separat für die einzelnen Kunden modifizieren)
mfG
dobra