Variablen Zusammenfügen

InFlame

Erfahrenes Mitglied
Hallo,

irgendwie sitze ich gerade auf dem Schlauch.
Ich hab in einer Zelle in der DB einen Wert oder Werte stehen. Durch die Website kommt ein neuer Wert, den ich dan die bereits vorhandenen Werte anhängen möchte (Nicht überschreiben!). Das ganze soll noch per , getrennt werden, damit ich es später wieder "exploden" kann. Kann mir bitte jemand sagen wie es geht? Denn so schwer sollte das ja nicht sein, oder? :mad:
Ist implode richtig wie bekomm ich aber da 2 Werte rein?

tia!!
 
Eigentlich gehören solche "mehrfach verwendeten" Felder ja in eine eigene Tabelle.
Als Lösung könntest Du die MySQL-Funktion CONCAT verwenden.

Gruß hpvw
 
Wo das Feld mit den Datensätzen ist, ist doch egal?
Es muss ein Feld sein, da es bilig viele Datensätze beinhalten kann.... also ist nicht festgelegt...
wie soll ich das mit einer extra Tabelle machen? Da smuss doch immer in eine Zelle...
Werde mir das mit CONCAT mal durchlesen.... hoffe ich versteh das ;)
 
1:n-Beziehungen werden üblicherweise mit 2 Tabellen abgebildet.
Beispiel: Ein Datensatz würde bei Dir enthalten:
ID=1;beliebigesFeld=irgendwas;=Texte=Text1,Text2,Text3
Ein weiterer:
ID=2;beliebigesFeld=irgendwasAnderes;Texte=Text4,Text5
Abbildung in einer Struktur mit zwei Tabellen (Zeilenweise):
Haupttabelle:
ID=1;beliebigesFeld=irgendwas
ID=2;beliebigesFeld=irgendwasAnderes
Assozierte Tabelle:
HaupttabelleID=1;Text=Text1
HaupttabelleID=1;Text=Text2
HaupttabelleID=1;Text=Text3
HaupttabelleID=2;Text=Text4
HaupttabelleID=2;Text=Text5

Zum CONCAT.
Code:
...SET Texte=CONCAT(Texte,',','neuer Text')

Gruß hpvw
 
Das ganze ist doch viel zu kompliziert... ist so viel einfacher...

Leider funktioniert das CONCAT nicht richtig. Wenn ich einen Datensatz in der DB habe, setzt er den neuen richtig mit , dahinter. Wenn allerdings 2 oder mehrere mit , getrennte Datensätze schon in der DB sind, fügt er die vorhanden Datensätze zu einem zusammen und fügt den neuen DS mit , dahinter. Er soll jedoch die alten DS mit , ebenfalls beibehalten... ?
 
InFlame hat gesagt.:
Das ganze ist doch viel zu kompliziert... ist so viel einfacher...
Nein, das ist normalisiert und ordentliches Datenbankdesign.

InFlame hat gesagt.:
Leider funktioniert das CONCAT nicht richtig. Wenn ich einen Datensatz in der DB habe, setzt er den neuen richtig mit , dahinter. Wenn allerdings 2 oder mehrere mit , getrennte Datensätze schon in der DB sind, fügt er die vorhanden Datensätze zu einem zusammen und fügt den neuen DS mit , dahinter. Er soll jedoch die alten DS mit , ebenfalls beibehalten... ?
Wenn Du zu Text1,Text2,Text3 noch Text4 hinzufügen willst, ergibt sich Text1Text2Text3,Text4? Oder wie soll ich das verstehen? Wenn Du das wie oben beschrieben anwendest kann das eigentlich nicht sein, also solltest Du mal etwas von Deinem Code zeigen.

Gruß hpvw
 
Hehe, über Datenbankdesign haben wir uns ja schonmal erfolgreich "gestritten" ;)

Ja, aus Text1,Text2 wird Text1Text2,Text3
So schreibt er es in die DB:
PHP:
mysql_query("UPDATE benutzerdaten SET merken=CONCAT($alt,',','$merken') WHERE Id=$user_id") or die("<br>Eintrag nicht möglich: " . mysql_error());
Liegt das vielleicht am auslesen vom alten Eintrag? Oder brauch ich das gar nicht
 
Du sollst da auch nicht $alt eintragen, sondern den Feldnamen, der vor dem Gleichheitszeichen steht. Das geht ganz ohne PHP in reinem SQL.

Wo haben wir uns gestritten? Zeig' mir mal 'nen Link. Ich kann mich zwar erinnern, das ich die Normalisierung hier schon das ein oder andere mal verteidigt habe, aber in welchem Thread haben wir uns gestritten? Übrigends: Ich diskutiere und streite nicht, sonst würde ich bei dem Blödsinn nicht helfen :p

Gruß hpvw
 
hpvw hat gesagt.:
Du sollst da auch nicht $alt eintragen, sondern den Feldnamen, der vor dem Gleichheitszeichen steht. Das geht ganz ohne PHP in reinem SQL.
Ok, jetzt funktionierts, hehe... vielen dank! aber ganz ohne PHP gehts auch nicht, da ich den neuen Wert ja per PHP an SQL weitergeben muss ;)

hpvw hat gesagt.:
Wo haben wir uns gestritten? Zeig' mir mal 'nen Link. Ich kann mich zwar erinnern, das ich die Normalisierung hier schon das ein oder andere mal verteidigt habe, aber in welchem Thread haben wir uns gestritten? Übrigends: Ich diskutiere und streite nicht, sonst würde ich bei dem Blödsinn nicht helfen :p

Gruß hpvw
Hab ihn gefunden: http://www.tutorials.de/tutorials190636.html
Und es war ja auch nicht wörtlich gemeint, deswegen hab ich ja die " um streiten gemacht :)
trotzdem wars bös (bezogen auf Blödsinn) ;)

-- EDIT --

Wenn ich jetzt so überlege, ist dein Vorschlag doch besser. Kann ich noch viel mehr Angaben speichern...
 
Zuletzt bearbeitet:
InFlame hat gesagt.:
Ok, jetzt funktionierts, hehe... vielen dank! aber ganz ohne PHP gehts auch nicht, da ich den neuen Wert ja per PHP an SQL weitergeben muss ;)
Da habe ich mich wohl unklar ausgedrückt. Ich wollte sagen, dass es nicht nötig ist, die alten Werte vorher mit PHP/MySQL auszulesen, da diese im Update-Query selbst bekannt sind.

InFlame hat gesagt.:
Hab ihn gefunden: http://www.tutorials.de/tutorials190636.html
Und es war ja auch nicht wörtlich gemeint, deswegen hab ich ja die " um streiten gemacht :)
trotzdem wars bös (bezogen auf Blödsinn) ;)
Der Smiley sollte die Boshaftigkeit abmildern, aber ein bisschen ärgern mich solche Datenbankstrukturen schon, weil ich weiss, dass ich selbst schon des Öfteren über solche Strukturen gestolpert bin, wenn ich sie erweitern wollte oder andere Abfragen benötigte. Aber das Thema hatten wir auch schon.

Gruß hpvw
 
Zurück