Mehrere Möglichkeiten binär

MaxMara

Mitglied
Hallo!

Leider weiß ich nicht wonach ich suchen soll, deswegen ist es gut möglich, dass meine Frage schon mal hier besprochen wurde. Also bitte nicht gleich steinigen ;)
Es geht um folgendes.

Ich habe bei einem Script 3 mögliche Produkte (Produkt A, B und C).
Für diese 3 Produkte gibt es einzelne Komponenten, die aber nicht für alle Produkte passend sind.
Ich bin auf der Suche nach einer sinnvollen Art der Datenspeicherung (in MySQL) und natürlich Abfrage.

Überlegt hab ich mir folgendes:
Man gibt Produkt A den Wert 2, B den Wert 4 und C den Wert 8. Aus der Summe dieser Werte ergibt sich eine einmalige Kombination der Produkte. Also wären Produkte A+C = 10 oder B+C = 12. Diesen (Summen)Wert kann ich dann bei den einzelnen Komponenten speichern. Nur wie komme ich von diesen Werten wieder zurück auf meine Produkte?

Das ist die große Frage.

Bin für jeden Rat dankbar.

Grüße
Christian

PS: Die Überschrift ist nicht gerade intelligent gewählt - es handelt sich eher um 2er-Potenzen... ich weiß :D
 
Zuletzt bearbeitet:
So.
Habe jetzt folgende Möglichkeit entdeckt, nur ist die Umsetzung für mich noch ein wenig schleierhaft:

Alles wird binär gespeichert (in der DB als String):

Produkt A => 0010
Produkt B => 0100
Produkt C => 1000

D.h. Produkt A und B wäre beispielsweise 0110, Produkt A und C wäre 1010

So weit so gut....

Nur...Wenn ich bei den Komponenten z.B. 1010 speichere, wie komm ich dann zurück auf Produkte A und C?

Danke nochmals.
Christian
 
Ich bin mir nicht sicher, ob ich deine Frage 100%-ig verstanden habe, aber warum machst du es dir so schwer?
Benutze doch einfach statts Zahlen Buchstaben für die jeweiligen Produkte?
Du hast sie ja schon selbst Produkt A, B und C genannt. Warum verwendest du nicht auch A, B und C?

Eine Kombination von Produkt A und Produkt C wäre somit also AC. Dadurch kannst du auch leicht wieder auf deine Produkte zurückgehen. Einfach jedes Zeichen in ein Array laden und schon hast du wieder die einzelnen Produkte.

Vielleicht hab ich dich aber auch einfach nur falsch verstanden :)

Gruß
schoko
 
Hi schocko.

Du hast schon recht. Nur was passiert, wenn ich bei Produkt 27 bin. Da wäre das Alphabet nicht ausreichend.
 
Ist zwar ein bißchen komplexer aber so könnte man es auch machen.
Wenn man z.b. 27 Produkte hat, hast du eine Zahl mit 27 Stellen.
Wenn ein Produkt dabei ist, steht dann da die 1 wenn nicht die 0.

Code:
100101001010110101001010010

Ist zwar nicht so platzsparend, aber auch ne Lösung ;)
 
tobee hat gesagt.:
Ist zwar ein bißchen komplexer aber so könnte man es auch machen.
[...]
Ist zwar nicht so platzsparend, aber auch ne Lösung ;)

Genauso will ich es ja auch machen.
Bei jeder Komponente soll so ein "Haufen 0/1er" gespeichert werden, aus dem ersichtlich ist, bei welchem Produkt diese Komponente möglich ist.

Nur wie geh ich das am Besten jetzt an?

und...Danke für die Antworten :)
 
Ich würde eine Tabelle erstellen mit products_position.
Das ist die Position und die productId gespeichert.
In einer anderen Tabelle die ganzen Produkte.
Wenn jetzt jmd. was bestellt schaut php nach was auf Position 1 der langen Zahl ist und fragt ab ob das der User angewählt usw.
Wichtig ist aber sobald du die Positionen der Produkte veränderst oder ein paar löscht MUSST du die Bestellungen aktualisieren wenn noch aktuell sind. Sonst bekommt der Kunde die falschen Produkte.

Das war jetzt der grobe Ansatz

Tobee
 
Hi tobee.

So in der Art hab ichs jetzt auch gelöst.

Aber die eigentliche Frage bleibt dadurch eigentlich offen und würde mich schon sehr interessieren.
 
Wieso gewährst du der „n:m“-Beziehung „Kunde kauft Produkt“ nicht eine Tabelle mit den Attributen „Kunden-ID“ und „Produkt-ID“?
Code:
+-----------+------------+
| Kunden-ID | Produkt-ID |
+-----------+------------+
| 1         | 1          |
| 1         | 2          |
| 2         | 1          |
| 2         | 3          |
| …         | …          |
+-----------+------------+
Das ist weit aus effektiver. Denn dadurch können Produkte ganz einfach hinzugefügt oder entfernt werden, ohne die Beziehungsdaten („Kunde kauft Produkt“) groß zu ändern. Darüber hinaus kannst du mit diesen Werten auch viel besser arbeiten und etwa direkt Kunden- oder Produktdaten zusammen abfragen.
 
Zurück