PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Update mir regulären Ausdrücken


MaSie
19.10.2003, 01:04
Hallöle,

hab mal wieder ein Superprob zu lösen:

In meiner DB für nen Shop speicher ich für jeden Artikel etliche Sachen. Da es für Klamoten ist, kann jeder Eintrag 2 mögliche Optionen haben, wie etwa Größe und Farbe.

Hier mal die Tabelle mit einem Beispielhaftem Datensatz (muß man nicht unbedingt lesen um untenstehendes Problem zu verstehen, aber vielleicht hilfts trotzdem jemanden:

CREATE TABLE shop_artikel (
ArtikelID int(11) NOT NULL auto_increment,
KategorieID int(4) NOT NULL default '0',
Seite tinyint(4) NOT NULL default '0',
SeitenRank tinyint(4) NOT NULL default '0',
Bez varchar(255) NOT NULL default '',
Beschreibung varchar(255) NOT NULL default '',
Optionen1 varchar(40) NOT NULL default '',
Optionen2 varchar(40) NOT NULL default '',
Bild varchar(40) NOT NULL default '',
Bildgross varchar(40) NOT NULL default '',
Imagewidth smallint(7) NOT NULL default '0',
Imageheight smallint(7) NOT NULL default '0',
AuswahlGroessenETC varchar(255) NOT NULL default '',
Bestellnr varchar(10) NOT NULL default '0',
AnzBestellungen tinyint(4) NOT NULL default '0',
VerfuegbarkeitTage tinyint(4) NOT NULL default '0',
Vorrat varchar(255) NOT NULL default '0',
Preis decimal(6,2) NOT NULL default '0.00',
NeuFlag enum('0','1') NOT NULL default '0',
PRIMARY KEY (ArtikelID)
) TYPE=MyISAM;

INSERT INTO shop_artikel VALUES (1, 8, 1, 1, 'Roma', 'BH + String von Lise Charmel in transparenter Spitze', 'Größe:36,38,40,42,44', 'Farbe:rot,schwarz,weiss', '1.jpg', 'apache_pb.gif', 259, 32, '', '001', 0, 1, 'hier kommt das zusammengeschusterte rein', '39.99', '1');



Nun muß hier noch die noch vorhandene Anzahl für jede Kombination rein. Hatte da an ungefähr folgendes Format für Anzahlfeld gedacht:
rot36@4;rot38@5;rot40@1;rot42@3;rot44@3;schwarz36@3;schwarz38@4.............
Also vom Prinzip her liste ich alle Kombinationen von Optionen1 und Optionen2 auf. Natürlich kann man evtl. auch die Seperatoren weglassen aber das soll jetzt erstmal nicht berücksichtigt werden, ebenso, dass ich eventuell sehr lange Feldinhalte bekommen kann.

Dieses Format zu generieren ist ja kein Problem, aber wenn ich jetzt ein Update auf den Datensatz machen möchte, will ich den Datensatz natürlich nicht vorher nochmals auslesen oder alles in nem Cookie oder im Url weiterreichen um den Update zu generieren, sondern das ganze mit regulären ausdrücken oder ähnlichem machen.
Nun die konkrete Frage: wenn ich weiß, das mein Artikel "rot" "42" 1 mal verkauft wird, dann soll der obige BeispielFeldinhalt nachher so aussehen"..........rot42@2;..... (Also aus rot42@3 wird rot42@2)



Jemand ne Ahnung wie das realisierbar ist?
Sollte mal ne Herausforderung sein, oder?

MfG Martin.


Jan Krüger
19.10.2003, 11:34
Könnte man sich nicht um das Problem drücken, indem man einfach eine zweite Tabelle anlegt, in der man nur die Kombinationen und die Anzahl der vorrätigen Exemplare speichert, zusammen mit der Artikel-ID?

MaSie
19.10.2003, 19:51
Könnte man schon, aber dadurch wäre es von der Performance her nicht so ideal, da ich dann bei jedem Aufruf einer Shopseite für jeden Artikel auch die Kombis auslesen müsste. könnte dies natürlich in jeweils einer DB-Abfrage erreichen (erst die Artikel der Seite auslesen, dann alle Kombis mit ner "in(...)"-Abfrage), aber das ist mir zu simpel und nicht schnell genug (bei 100 Artikel mit je Option1 3Mgl. und Option2 5Mgl.==>100*3*5=>1500 Sätze). Außerdem speicher ich bei jeden verkauften Artikel (egal welche Optionen) die Verkaufsanzahl um ne TopSeller-Liste zu ermöglichen. Könnte dies natürlich auch auslagern in noch ne nächste Tabelle, aber dann komm ich mit den Updates nicht mehr hinterher, da die sich dann häufen würden (3Updates+2Mails verschicken, Topseller-Liste aktuallisieren), wäre dann super, wenn der User dann zufällig das Skript unterbricht.
Wenn nicht anders möglich, müßte ich sonst in dem SessionCookie sämtliche Optionskombis zu allen im Warenkorb befindlichen Artikeln speichern, nur blöd, wenn dann jemand lange wartet und ein anderer den gleichen Artikel kauft, dann wird dieser nur einmal gezählt, obwohl zweimal gekauft.

Ist denn mein Vorhaben mit den regulären Ausdrücken beim Update theoretisch realisierbar? Ich denke eigentlich schon, drum ist es ja ne Herausforderung.

MfG Martin.