Autor Beitrag
delphiprogrammierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Do 27.11.08 21:06 
kopf hoch, sind doch nur 108 (wenn ich mich nich verrechnet hab) :P
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Fr 28.11.08 00:17 
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
ist wohl ne Hausaufgabe, oder?

Glaub ich nicht ;) .

Aber alle Möglichkeiten durchzugehen sollte trotzdem nicht schwer sein. Wo liegt das Problem?
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 28.11.08 01:41 
Du könntest auch die möglichen Werte in 3 tabellen ablegen

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 28.11.08 08:26 
Ah sooo, Datenbank? 'CROSS JOIN' ist dein Freund.

_________________
Na denn, dann. Bis dann, denn.
delphiprogrammierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: 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
BeitragVerfasst: Fr 28.11.08 10:01 
Ich will denn mal nicht so sein :roll:
Das sollte dir weiterhelfen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
const
   Groesse: Array[1..6of String = ('20''21''22''23''24''25');
   Material: Array[1..2of String = ('Echtleder''Kunstleder');
   Farbe: Array[1..3of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: 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
BeitragVerfasst: Fr 28.11.08 10:15 
Woher bekommst du die verschiedenen Variablen? Datenbank, ListBox oder Datei?
delphiprogrammierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 28.11.08 12:05 
Und darauf greifst du per SQL zu?
delphiprogrammierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Fr 28.11.08 12:40 
ja genau
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 28.11.08 12:48 
Dann wurde das passende Stichwort oben ja bereits genannt:
en.wikipedia.org/wiki/Join_(SQL)
delphiprogrammierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.12.08 13:58 
Ich denke das hier müsste das gewünschte Ergebnis erzielen:
ausblenden 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. ;-)