MySQL的新手,我有用户表,用户在用户注册时保存数据。注册时需要1封电子邮件,但我希望他们能够在User表的邮件col中添加其他电子邮件。这可能吗?我试过了:
INSERT INTO users (email) VALUES ('email@fake.com') WHERE user_id = 1;
并发现INSERT不会尊重'WHERE'。首先,这是正确的方法吗?如果没有,如果用户选择,如何添加多个值并能够删除多个值中的一个?
答案 0 :(得分:1)
首先,您的简单解决方案是使用CODEPEN
UPDATE `users`
SET `email` = CONCAT(`email`, ',', 'new_email@mail.com')
WHERE id = 1
但是!当您的用户想要delete
电子邮件时,问题就出现了。
您必须展开当前的email
字符串,从中删除值,然后执行以下更新:
UPDATE `users`
SET `email` = 'string of emails'
WHERE id = 1
这就是为什么存储email
应该在单独的字段中,例如email1
,email2
如果您有2封电子邮件 。
如果您允许用户收到大量电子邮件 - 那么您应该添加一个名为user_emails
的新表格,其方案如下:
user_id | email
然后选择电子邮件就像:
SELECT `email` FROM `user_emails` WHERE `user_id` = 1
添加电子邮件只是另一个插入内容:
INSERT INTO `user_emails` VALUES (1, 'new_email')
删除是:
DELETE FROM `user_emails` WHERE id = 1 AND email = 'new_email'
答案 1 :(得分:0)
Mysql是一种关系数据库语言,因此可以促进相关表格的相关时间。正如@Fabio评论的那样,您最简单的方法是使用另一个电子邮件地址表,并将email
列替换为users
列,其中userEmailId
列允许您关联此行中的多行通过让email
中的每一行都包含此user
和实际的电子邮件数据,email
表返回此userEmailId
。
添加表格是最简单的方法,我能想到实现此目的的另一种方法是向user
添加更多列以添加其他电子邮件。然后,您可以通过更新空电子邮件列,在要添加电子邮件的update
上使用user
。
第三种方法可能会根据您使用这些查询的方式而有效,如果它是较大的php,节点或类似应用程序的一部分,则可以将新电子邮件附加到当前通过电子邮件将两者分开,并将其与电子邮件中不允许的某种字符分开,空格字符可以是一个简单的例子。在您的服务器语言中,您可以将此字符串分成单独的电子邮件。使用update
可以实现此目的,但在添加新电子邮件时,您必须使用子查询来在email
字段中携带当前数据。