2016-03-29 8 views
0

Neu bei MySQL, habe ich Benutzer Tabelle, die Daten enthält, wenn Benutzer anmelden. Bei der Anmeldung ist 1 E-Mail erforderlich, aber ich möchte, dass sie zusätzliche E-Mails zur Mail-Spalte der Benutzertabelle hinzufügen können. Ist das möglich? Ich habe versucht:in delete Werte in mysql Spalte einfügen

INSERT INTO users (email) VALUES ('[email protected]') WHERE user_id = 1; 

und herausgefunden, INSERT wird nicht respektieren 'WHERE'. Erstens ist dies sogar der richtige Ansatz? Wenn nicht, wie kann man mehrere Werte hinzufügen und später einen von mehreren Werten löschen, wenn der Benutzer dies wählt?

+0

Am besten ist es, eine zweite Tabelle mit allen alternativen E-Mails mit derselben Benutzer-ID als Benutzer Tabelle – Fabio

+2

zu erstellen, 'INSERT' fügt neue Daten ein, 'UPDATE'-Aktualisierungen existieren. Bitte lesen Sie einige mysql/sql Grundlagen. –

+0

Ich dachte, dass aber versucht wurde, es zu vermeiden –

Antwort

1

Zunächst einmal Ihre einfache Lösung wird mit CONCAT

UPDATE `users` 
SET `email` = CONCAT(`email`, ',', '[email protected]') 
WHERE id = 1 

Aber! Hier kommt das Problem, wenn Ihr Benutzer eine E-Mail an delete senden möchte. Sie müssen Ihren aktuellen email String explodieren, entfernen Wert von ihm, und wie ein Update tun:

UPDATE `users` 
SET `email` = 'string of emails' 
WHERE id = 1 

Das warum email s Lagerungs- sollte entweder in getrennten Feldern sein, wie email1, email2 wenn Sie 2 E-Mails nur.

Wenn Sie erlauben Benutzern, viele E-Mails haben - dann sollten Sie eine neue Tabelle hinzufügen, wie user_emails zum Beispiel mit Schema genannt:

user_id | email 

Dann die Auswahl von E-Mails werden so etwas wie:

SELECT `email` FROM `user_emails` WHERE `user_id` = 1 

Hinzufügen von E-Mail ist nur ein weiterer Einsatz:

INSERT INTO `user_emails` VALUES (1, 'new_email') 

Und r emoving ist:

DELETE FROM `user_emails` WHERE id = 1 AND email = 'new_email' 
0

Mysql ist eine relationale db-Sprache, und als solche fördert verwandte Tabellen für Zeiten wie diese. Wie @Fabio kommentiert, würde Ihre einfachste Lösung sein, eine andere Tabelle von E-Mail-Adresse haben, und Ihre email Spalte auf users mit einer userEmailId Spalte ersetzen, die Sie mehrere Zeilen in dieser email Tabelle zurück zu diesem user, indem jede Zeile in email beziehen können enthalten diese userEmailId und die tatsächlichen E-Mail-Daten.

Das Hinzufügen einer Tabelle ist der einfachste Ansatz und die einzige andere Möglichkeit, die ich erreichen kann, ist das Hinzufügen weiterer Spalten zu user für zusätzliche E-Mails. Sie könnten dann update auf einem user verwenden, dem Sie eine E-Mail hinzufügen möchten, indem Sie eine Null-E-Mail-Spalte aktualisieren. Ein dritter Ansatz, der abhängig davon funktionieren kann, wie Sie diese Abfragen verwenden, und ob es Teil einer größeren php-, node- oder ähnlichen Anwendung ist, wäre, eine neue E-Mail an eine aktuelle E-Mail anzuhängen und die beiden zu trennen Mit einer Art von Zeichen, die in einer E-Mail nicht erlaubt sind, könnte ein Leerzeichen ein einfaches Beispiel sein. Innerhalb Ihrer Serversprache können Sie diese Zeichenfolge in Ihre individuellen E-Mails trennen. Mit update kann dies erreicht werden, aber Sie müssen Unterabfrage, um aktuelle Daten innerhalb der email Feld beim Hinzufügen einer neuen E-Mail zu übertragen.