Autor Beitrag
motion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Di 22.11.11 16:38 
Hallo,
für einen Webshop muß ich ein kniffiliges Problem lösen:
Der Webshop speichert die Artikel intern mit eindeutigen IDs (Long Integer; nur Positive Zahlen benutzbar; also eigentlich 31Bit von 0..2147483648

Jetzt muß ich für jeden einzelnen Artikel ein eindeutige ID generien:
HauptID: Bereich von 1..50000
Farben: Bereich 1..9999
Größen: Bereich 1..9999

Tja: ID=HauptID* 10000 * 10000 + Farben * 10000 + Größen
fällt leider aus, das ich damit den zulässigen Zahlenbereich sprenge.

Wie kriege ich die IDs bloß eingedampft auf die maximal mögliche Zahlengröße?

Bei jedem Artikel kommen maximal 20 Farben und max. 20 Größen aus dem gesamten Farben und größen Pool vor.
Irgendeine Abstraktionsebene muß da noch rein.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 22.11.11 17:49 
FFFF FFFF
hier die Hauptnummer 0010 0111 0000 1111 für 9999 Farbe
50000 1010 0111 0000 1111 für 9999 Größe
1100 0011 0101 0000

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Di 22.11.11 18:40 
@brummi:
Ich glaube ich verstehe Deine Ausführungen nicht ganz.
Kannst Du mir das noch mal erläutern?
Selbst wenn man den Bereich der notwendigen ID-Bereiche etwas verkleinert z.B.
HauptID (d.h. Anzahl der Standardartikel) auf 32767 = 15 Bits
Farben und Größen jeweils 4095 = 12 Bits + 12 Bits
dann bin ich insgesamt immer noch bei 39 Bits, somit 8 zuviel.

Ich habe schon überlegt sämtliche Farben und Größen-Kombinationen eines Artikels sortiert aufzulisten und durchlaufend zu nummerieren (auch wenn das mit [My]SQL ein Albtraum ist). Dann kommt man auf weniger als 1000 Kombinationsmöglichkeiten pro Artikel, hier mal X genannt. Dann könnte man eine ID genieren:
HauptID*1000+X

Mit dieser Logik käme ich nur in Schwierigkeiten, wenn im nachhinein Größen und Farben HINZUGEFÜGT werden. Das kann ich eventuell ausschliessen, weil bei Anlage der Artikels alle Größen und Farben festgelegt werden und dann nicht mehr lieferbare Artikel über den Bestand=0 festgelegt werden.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 22.11.11 19:26 
Sorry, ich hatte einen Hänger, klar so geht es nicht.
Wie wäre es mit einer Hilfstabelle mit AutoID die Deine gesuchte Artikelnummer darstellt
sowie HauptID,Farbe und Größe, so kommst Du zumindest beim erweitern nicht ins schleudern.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Di 22.11.11 20:05 
@brummi.
Hmmm... Stichwort Hilfstabelle ist nicht schlecht. Da könnte ich mit autoincrement die IDs sicher stellen und immer rückwärts suchen, um eine ID wieder in die Einzelelemente mit Farben und Größén aufzulösen. Mit SQL kann ich die Daten schnell umpumpen und mit insert/update die Daten erstellen/aktualisieren.
Ich glaube DAS ist die beste Idee. So werde ich das mal angehen.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 22.11.11 21:48 
@motion

ok, aber ich heiße nicht brummi, grrrr....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Di 22.11.11 22:12 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
@motion

ok, aber ich heiße nicht brummi, grrrr....


Sorry ...
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 23.11.11 16:01 
Hallo,

ich denke Du stellst dir das ganze immernoch etwas komplizierter vor als es ist.
Du hast in deiner Artikeltabelle ja noch weitere Felder die jeden einzelnen Artikel beschreiben. Warum schaffst du dann nicht noch ein weiteres Feld "ArticleNumber" oder so als String (Char) mit einer Länge von 50 Zeichen zum Beispiel. So ist auch noch Platz für Später falls noch Artikel mit weiteren Eingeschaften hinzukommen. Nun legst du für jeden Wert den deine Eigenschaften (Artikel-Nr., Farbe und Größe) annehmen können eine Kurze, eine eindeutige Kennung fest. Beim Eintragen der Artikel in die Tabelle setzt Du dann den String aus den Kennungen der Eigenschaftswerte zusammen.
Allgemein sollte jede Tabelle ein Feld "Id", oder so ähnlich, von Typ Autoinc haben. Das macht einem die Arbeit deutlich leichter wenn es um eindeutige Zuodnungen von Datensätzen geht. Auf das Feld einen Index und das ganze geht auch dann noch ordentlich flott wenn die Tabellen richtig groß werden.
Deine Artikelkennung die Du so schaffst ist solange eindeutig wie du nicht den gleichen Artikel mit den gleichen Eingeschaften erneut einfügst. Das kannst Du über einen UNIQUE Index auf das Feld verhindern.
Zur Anzeige eines Artikels hast Du so dann die Möglichkeit den Autoincwert zu nehmen der aber nicht sehr aussagekräftig ist. Oder die Artikelkennung die Du nun auch zur Verfügung hast. Diese ist bei einer kleveren Wahl der Eigenschafskennungen perfekt geeignet um Dir und den Kunden gegenüber den Artikel leicht und verständlich zu representieren ohne den Namen oder die Beschreibung lesen zu müssen.
Ich arbeite in meinem Fall mit einem virtuellen Atikel der mir nur die Artikelnummer bringt und die Eigenschaften festlegt die die realen Artikel des Artikels haben können. Der Artikel selber kann nicht verkauft werden sondern nur die Artikel sich aus ihm erzeugen lassen.
Das ganze schaut dann zum Beispiel so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Id   ArtikelNumber  Name                                    Eigenschaften
01   GRING          Gummiringe (virtuell)                   Durchmesser(10,30,50) Farbe(schwarz=sw, rot=rt, gold=gd)
02   GRING10sw      Gummiringe Durchmesser 10 Farbe schwarz
03   GRING10rt      Gummiringe Durchmesser 10 Farbe rot
04   GRING10gd      Gummiringe Durchmesser 10 Farbe gold
05   GRING30sw      Gummiringe Durchmesser 30 Farbe schwarz
06   GRING30rt      Gummiringe Durchmesser 30 Farbe rot
07   GRING30gd      Gummiringe Durchmesser 30 Farbe gold
08   GRING50sw      Gummiringe Durchmesser 50 Farbe schwarz
09   GRING50rt      Gummiringe Durchmesser 50 Farbe rot
10   GRING50gd      Gummiringe Durchmesser 50 Farbe gold

Das einzige was nicht ganze einfach ist und was ich ganz ehrlich nicht mit SQL Lösen wollen würde ist das Erstellen der Artikelnummern aus den Eigenschaften.
In Delphi ist das eine relativ einfache N-Dimensionale Matrix ausmultiplikation. (N ist die Anzahl der Eingenschaften)

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Mi 23.11.11 16:56 
@SinSpin:
Danke für Deine Bemühungen.
Diese eindeutige Artikel-Nr. welche Haupt-Art-Nr.+Farbcode+Größencode enthält habe ich schon, allerdings ist damit nur schwer zu arbeiten. Eindeutige IDs sind zum Abgleich beider Datenwelten (WaWi und Webshop) sehr viel einfacher zu handhaben.
Der gesamte Transfer muss mittels php und möglichst SQL ausgeführt werden um die Verarbeitung möglich zu machen.