SQL: Mehrere Werte in einem Feld?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Moin zusammen,

nachdem ich nun erfolgreich in PHP eine Verbindung hergestellt habe und auch alles mit INSERT, SELECT usw. funktioniert, stehe ich nun vor einem neuen Problem...

Und zwar möchte ich gerne mehrere Werte in einem Feld abspeichern. Das soll z.B. so aussehen:
Code:
PID: 7985 - Price: 15, 20, 30 - Price Old: 0, 10, 20

Dabei soll Preis 15 & 0, Preis 20 & 10 und Preis 30 & 20 jeweils zusammengehören! - Das ist SEHR WICHTIG.
Ich habe zu Preis und Price Old je ein Array von der Größe 3. Wie kann ich jetzt diese 3 Werte in ein Feld packen?

Ich habe bereites gegoogelt, allerdings keine wirklich richtige Antwort gefunden...

Würde mich sehr über eine Antwort freuen!
MfG und Vielen Dank!
 
Ein Feld, ein Wert.
Du kannst mehrere Zeilen haben, du kannst mehrer Felder haben, du kannst mehrere Tabellen haben. Aber pro Feld, ein Wert. Ausser du konvertierst die Werte zusammen in einen Wert und klamüserst sie nachher wieder auseinander. Keine gute Idee.

Also mach ein Feld pro Wert
PID, Price1, Price2, Price3. Price1old, Price2old, Price3old. et voila!
 
Deine Werte sollten immer atomar vorliegen, allein schon wegen der Normalisierung.
 
Mein Problem ist aber, dass ich immer eine variable Anzahl an Preisen und Alten Preisen pro Produkt habe. Aber wirklich PRO Produkt. Also besitzt jedes Produkt, mehrere Preise, aber mehrere Preise immer nur ein Produkt.

Ich kann ja schlecht zwei mal den selben PK verwenden... Also müssen Sie wohl zwangsweise in ein Feld.
Wie mach ich das?
 
In diesem Fall würde ich eine eigene Tabelle für die Preise machen, die dann mehrere (beliebig viele) Einträge pro Produkt enthalten kann. Die Produkt-ID ist in dieser Tabelle nicht der PK, also gibt es da keine Konflikte.
 
Und wie Ordne ich die Preise dann den Produkten zu?

Mein Problem ist ja, dass ich dann immer noch eine variable Anzahl an Preisen habe und immer noch das alles mit den Links, Preis Alt und noch dem Feld Shops machen muss...
 
Ganz einfach über einen Fremdschlüssel in der Produkt Tabelle und einen Primärschlüssel in der Preistabelle, jeweils mit den passenden Constraints.
 
In der Preise-Tabelle steht ja die Produkt-ID mit drin, du kannst also Abfragen machen wie "SELECT price FROM prices WHERE product_id = 4711". Das liefert dir alle Preise für das Produkt. Genauere Ratschläge könnten wir dir nur geben, wenn wir mehr über deinen Anwendungsfall wüssten.
 
Und wir kann ich untereinander dann die Preise, Alten Preise & die Links miteinander verknüpfen.
Das ist mir jetzt klar geworden mit dem, ich gebe einem Preis einfach den Identifier. Aber wie verknüpfe ich die untereinander dann: Preise, Alten Preise & die Links

Weil jeder Preis gehört zu einem Link und umgekehrt. Genauso wie mit dem Alten Preis
 
Ich weiß nicht genau, was du vorhast, aber du brauchst bei relationalen Datenbanken NIEMALS mehrere Werte in einem Feld. Das ist einfach Fakt.

Code:
PID  | Price | Old Price
-----|-------|-----------
7985 |    15 |  0
7985 |    20 | 10
7985 |    30 | 20

PID  | Name
-----|-----
7985 | Lego Duplo Mein Erstes Karussell

oder

Code:
PID  | Shop | Price | Date       | Url
-----|------|-------|------------|-------------------
7985 |    1 | 0     | 2017-01-01 | http://example.com
7985 |    1 | 15    | 2017-01-15 | http://example.com
7985 |    2 | 10    | 2017-01-04 | http://example.com
7985 |    2 | 20    | 2017-01-21 | http://example.com

PID  | Name
-----|-----
7985 | Lego Duplo Mein Erstes Karussell

Alternativ mit ID.
 
Zuletzt bearbeitet:
Aber ich kann doch unmöglich mehrere Werte in einer Tabelle haben, die den selben PK haben.
Das ist bei dir aber gerade so...?
 
Ein PK kann sich über mehrere Spalten erstrecken, muss nicht ein einzelner Wert sein.
 
Wenn zu jedem Preis ein Link gehört, dann kannst du in die Tabelle Preise noch eine Spalte Link einfügen und die Links da reinschreiben.

In dem Schema von character ist die PID kein PK. Eine Tabelle braucht nicht unbedingt einen PK.
 
FrazeColder schrieb:
Achso, Alles klar.
Wobei man am Ende noch hinzufügen müßte, daß man natürlich zwei Werte in einem Feld kombinieren kann, wenn man weiß, was man tut. Das nennt sich "Denormalisieren" und kann bei bestimmten Zusammenhängen, die sonst zu kompliziert aufeinander abgebildet werden müßten (oder was für die Anwendung das eigentliche Resultat darstellt), sehr sinnvoll sein. Das Auseinanderdröseln von ein paar Zahlen in einem Feld ist sogar in SQL trivial und braucht ggf. nur in der Anwendung (Frontend, PHP etc.) gemacht zu werden.
 
Das würde ich nie machen.
Auser es gibt wirklich einen zwingenden Grund oder so einen großen Zeitdruck.

Oft ändert sich noch was.... zb möchten man noch was anderes abfragen und dann wirds ganz schnell wieder blöd. Zudem ist es so einheitlich und es ist klar was sache ist, wenn dir vielleicht mal jemand hilft.
 
Zurück
Oben