• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] [MySQL] - bei UPDATE Wert anhängen

J

j-l-n

Guest
Ich habe in meiner MySQL-Datenbank eine Tabelle mit der Spalte "angemeldet_von".
In dieser Spalte soll gespeichert werden, woher der User gerade angemeldet ist, also mehrere Werte in einer Spalte.
Bsp.: angemeldet_von: ios_app, desktop

Wie bekomme ich es nun hin, dass bei einem Update der neue Wert (also in den Fall "desktop") z.B. durch ein Komma getrennt angehängt wird, ohne den vorherigen zu überschreiben? Und gibt es vielleicht auch noch einen Trick, wie man das dann komfortabel als Array in die einzelnen Bestandteile zerlegt auslesen kann?
 
Aus`m Kopf, in etwa so:
Code:
update [TABELLENNAMEN] set angemeldet_von = ((select angemeldet_von from [TABELLENNAMEN] where id = ...) + ', desktop') where id = ...;

- - - Aktualisiert - - -

Und gibt es vielleicht auch noch einen Trick, wie man das dann komfortabel als Array in die einzelnen Bestandteile zerlegt auslesen kann?
split? => http://www.php.net/manual/de/function.split.php
 
Kommaseparierte Werte in einem Textfeld in einer Datenbank ist extrem selten eine gute Idee und verletzt die erste Normalform: Normalisierung (Datenbank)

Mach' eine Referenztabelle. Da hast du dann auch kein Problem mit dem Überschreiben.
 
Aus`m Kopf, in etwa so:
Code:
update [TABELLENNAMEN] set angemeldet_von = ((select angemeldet_von from [TABELLENNAMEN] where id = ...) + ', desktop') where id = ...;
Danke, auch wenn ich weiß, dass es so gehen würde. Ich dachte, es gäbe vielleicht eine elegantere Methode, bei der man den Wert nicht erst auslesen braucht...


Kommaseparierte Werte in einem Textfeld in einer Datenbank ist extrem selten eine gute Idee und verletzt die erste Normalform: Normalisierung (Datenbank)
Aber lohnt sich das denn wirklich? Wegen einem einzigen Feld?
 
*huch, ich bin ein Sünder ... denn er verstößt bewusst wie regelmäßig gegen die 1. NF*

Hi zusammen,

es soll Situationen geben, wo der Zweck die Mittel heiligt - aber auch Mittel zum Zweck sein muss. Ich stand - in der Tat - mal an der gleichen Stelle wie der TO und habe mich dann für Stilbruch entschieden. *... und irgendwo aus dem Board hört man ein 'buuuuh'*

Warum ich mich dagegen entschieden habe:
- Datenvolumen (es ist bei mir nicht nur ein Wert, sorry)

Hätte ich mich für die 1. NF gnadenlos entschieden, wäre meine Table mehr als doppelt so groß - im Endeffekt: Performance auf den hintersten Kommastellen der Zeitmessung.

Der größte Nachteil beim ","-Separieren ist, dass Du ein Zeichen verlierst und bei Zugriff auf diese Spalte immer wissen musst, dass dort das Komma Dein Trenner ist. Aber es gibt Momente, da eignet sich kein Komma - nehmen wir schlichtweg eine deutsche Preisschreibweise mit "9,95 EUR" (da kommt dann das nächste Zeichen, was man "opfert").

PHP hat hingegen dafür genau das richtige eigentlich im Gepäck: arrays, welche serialisiert in Deinem Textfeld abgespeichert werden (Achtung, Quotes bei utf-8!) - und Du verlierst gar kein Zeichen!

Ich könnte jetzt noch viele Gründe für die Vorzüge nennen oder warum ich es stellenweise wirklich so im Einsatz habe, aber ja, es ist ein Verstoß! Nur sollte man nicht zwingend päpstlicher als der Papst sein ... es ist eine Entscheidung, die man aufgrund "zu erwartendem Umfang", "Aufwand" etc. trifft. Und manchmal ist es wirklich erlaubt ... so wie "zu schnell fahren" mit dem Auto.

Schlagt mich bitte nicht, aber um schlichtweg eine Information zu dem User "anzuhängen", ist ein UPDATE bei Login auf diese eine Spalte - IMO - ausreichend! (wer jetzt dagegen argumentiert mit "ja, aber ein 2. Login", dem erzähle ich was von Session-Capturing und Sicherheit!!! :D)

Haut rein ... !
 
Aber lohnt sich das denn wirklich? Wegen einem einzigen Feld?
Die Normalformen, die hatte ich ganz vergessen... :)

Ich muss kkapsner Recht geben, wenn man´s richtig machen will, verletzt man die Normalenformen nicht. Auch wenn es sich hierbei nur um ein Feld handelt. Denn mit einem Feld fängt es an und dann kommt ein weiteres hinzu und so weiter...
 
Zurück
Oben