Autor |
Beitrag |
delphiprogrammierer
      
Beiträge: 53
|
Verfasst: Do 27.11.08 19:34
Hallo,
mir raucht gerade der Kopf. Es geht um folgende Aufgabe.
Für einen Onlineshop soll ich Varianten für Produkte ( Schuhe ) einführen. Dazu habe ich verschiedene Tabellen :
1. tbl_variantengruppen
-Grösse
-Material
-Farbe
2. tbl_variantentypen
Grösse -20
-21
-22
-23
-24
-25
Material -Echtleder
-Kunstleder
Farbe -Schwarz
-Weiss
-Grün
Ich benötige also einen Algorythmus, der mir sämtliche Kombinationen ausgibt :
einige Kombinationen sind z.B.
Grösse 20, Material Echtleder, Farbe scharz
Grösse 20, Material Echtleder, Farbe weiss
Grösse 20, Material Echtleder, Farbe grün
Grösse 20, Material Kunstleder, Farbe scharz
Grösse 20, Material Kunstleder, Farbe weiss
Grösse 20, Material Kunstleder, Farbe grün
Grösse 21, Material Echtleder, Farbe scharz
Grösse 21, Material Echtleder, Farbe weiss
Grösse 21, Material Echtleder, Farbe grün
Grösse 21, Material Kunstleder, Farbe scharz
Grösse 21, Material Kunstleder, Farbe weiss
Grösse 21, Material Kunstleder, Farbe grün
Wie bekomme ich alle Möglichkeiten heraus ???
|
|
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: Do 27.11.08 21:06
kopf hoch, sind doch nur 108 (wenn ich mich nich verrechnet hab)
Ich würde es mit Array of string probieren und dann per Schleifen jedes Array elemant durchgehen.
€: ich hab mich versehen, nicht verrechnet  36 möglichkeiten, das klingt doch schonmal besser
€2: will mal wer überprüfen, ob der Code richtig ist? Hab meine Exe (5 min Programmiertzeit) angehängt. Ich will dir ja nich die Lösung shcicken, aber die Idee von oben is schon ganz gut. Die Arrays hab ich konstant gemacht.
Einloggen, um Attachments anzusehen!
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 27.11.08 23:31
EDIT:
Hier stand eben noch der Algorithmus... ist wohl ne Hausaufgabe, oder?
Na denn... Für jede Variante, Für jede Grösse, Für jedes Material und für jede Farbe einfach ... äh...
_________________ Na denn, dann. Bis dann, denn.
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Fr 28.11.08 00:17
alzaimar hat folgendes geschrieben : | ist wohl ne Hausaufgabe, oder? |
Glaub ich nicht  .
Aber alle Möglichkeiten durchzugehen sollte trotzdem nicht schwer sein. Wo liegt das Problem?
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 28.11.08 01:41
Du könntest auch die möglichen Werte in 3 tabellen ablegen
SQL-Anweisung 1: 2:
| SELECT * FROM groessen, material, farbe |
würde dir dann genau die 36 Kombinationen liefern die du willst
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 28.11.08 08:26
Ah sooo, Datenbank? 'CROSS JOIN' ist dein Freund.
_________________ Na denn, dann. Bis dann, denn.
|
|
delphiprogrammierer 
      
Beiträge: 53
|
Verfasst: Fr 28.11.08 09:30
An alle,
es handelt sich hier nicht um eine Hausaufgabe. Ich bin nur momentan nicht in der Lage das Problem zu lösen.
Die von mir genannten Daten sind nur beispiele dafür, was ich benötige. Es können auch noch 20 andere Grössen, Farben etc kommen.
Der Code muss beliebig viele unterschiedliche Eigenschaften von Schuhen bewältigen können.
Falls jemand eine Lösung dazu hat würde ich mich sehr freuen. Eine angehängte EXE ist zwar schön, aber nur für dich ...
Danke
|
|
MH
Hält's aus hier
Beiträge: 11
Win XP
D3, D2005
|
Verfasst: Fr 28.11.08 10:01
Ich will denn mal nicht so sein
Das sollte dir weiterhelfen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| const Groesse: Array[1..6] of String = ('20', '21', '22', '23', '24', '25'); Material: Array[1..2] of String = ('Echtleder', 'Kunstleder'); Farbe: Array[1..3] of String = ('Schwarz', 'Weiß', 'Grün');
procedure TForm1.Kombinatorik; var g, m, f: integer; begin for g := 1 to 6 do for m := 1 to 2 do for f := 1 to 3 do ListBox1.Items.Add('Größe: ' + Groesse[G] + ', Material: ' + Material[M] + ', Farbe: ' + Farbe[f]); end; |
|
|
delphiprogrammierer 
      
Beiträge: 53
|
Verfasst: Fr 28.11.08 10:09
@MH, danke aber ich möchte das es variabel gestalltet ist. Es können beliebig viele unterschiedliche Merkmale wie z.B. Grösse, Farbe, Material, Sohle, Verschluss .. kommen.
Vielen Dank
Delphirprogrammierer
|
|
MH
Hält's aus hier
Beiträge: 11
Win XP
D3, D2005
|
Verfasst: Fr 28.11.08 10:15
Woher bekommst du die verschiedenen Variablen? Datenbank, ListBox oder Datei?
|
|
delphiprogrammierer 
      
Beiträge: 53
|
Verfasst: Fr 28.11.08 10:27
Ich habe folgende Tabellen
tbl_variantengruppen mit den feldern internalid, bezeichnung mit folgendem inhalt :
1 grösse
2 farbe
3 material
tbl_variantentypen mit den feldern internalid, refvariantengruppe, bezeichnung mit folgendem inhalt :
1 1 20
2 1 21
3 1 22
4 1 23
5 2 weiss
6 2 grün
7 2 schwarz
8 2 braun
9 3 Echleder
10 3 Kunstleder
11 3 Plastik
tbl_variantentypen2produkte mit den feldern internalid, refvariantengruppe, refvariantentyp, refprodukt
In dieser Tabelle steht, welche Kombinationen für jedes Produkt ausgewählt wurden z.B.
1 1 1 1 -> Grösse 20
1 1 1 2 -> Grösse 21
1 1 1 3 -> Grösse 22
1 2 6 3 -> grün
1 2 7 3 -> schwarz
1 2 8 3 -> braun
Das Produkt 3 gibt es in der Ausführung Grösse 22 in den Farben grün, schwarz und braun
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 28.11.08 12:05
Und darauf greifst du per SQL zu?
|
|
delphiprogrammierer 
      
Beiträge: 53
|
Verfasst: Fr 28.11.08 12:40
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 28.11.08 12:48
Dann wurde das passende Stichwort oben ja bereits genannt:
en.wikipedia.org/wiki/Join_(SQL)
|
|
delphiprogrammierer 
      
Beiträge: 53
|
Verfasst: Mo 01.12.08 12:27
Irgendwie klappt das immer noch nicht. Ist jemand in der Lage, mir ein Beispiel zu erstellen, was auf meine Anforderung passt ?
Danke vielmals und eine schöne Woche
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.12.08 13:58
Ich denke das hier müsste das gewünschte Ergebnis erzielen:
SQL-Anweisung 1: 2: 3: 4: 5: 6:
| SELECT * FROM ((tbl_variantentypen2produkte LEFT OUTER JOIN tbl_variantentypen ON tbl_variantentypen2produkte.refvariantentyp = tbl_variantentypen.internalid) LEFT OUTER JOIN tbl_variantengruppen ON tbl_variantentypen2produkte.refvariantengruppe = tbl_variantengruppen.internalid) WHERE tbl_variantentypen2produkte.refprodukt = 3 | LEFT OUTER JOIN sorgt dafür, dass aus der ersten Tabelle immer alle Zeilen angezeigt werden, auch wenn es keine Entsprechungen gibt. Wenn du nur dann ein Ergebnis haben willst, wenn es auch entsprechende Referenzen in den anderen Tabellen gibt, musst du stattdessen INNER JOIN benutzen.
Jedenfalls sollte deine Ergebnistabelle dann alle Spalten haben, die in den drei Tabellen vorkommen der Reihe nach in tbl_variantentypen2produkte, tbl_variantentypen, tbl_variantengruppen. Wenn du die internalids oder so nicht haben willst, kannst du das SELECT * FROM ändern in SELECT tbl_variantentypen2produkte.refprodukt, tbl_variantengruppen.bezeichnung, tbl_variantentypen.bezeichnung FROM. So bekommst du nur diese Spalten.
Dazu muss ich sagen, dass ich mit SQL wenig bis keine Erfahrung habe, ich habe das mir jetzt aus den Beispielen bei Wikipedia hergeleitet, es kann auch total falsch sein. 
|
|
|