新闻稿分类在一行中,如1,2-Mysql简单数据库设计
我正在使用一个简单的时事通讯脚本,其中一个用户可以使用不同的类别。但是我想把不同的类别放在一行,比如1,2,3 各表: 时事通讯和电子邮件新闻稿分类在一行中,如1,2-Mysql简单数据库设计,mysql,Mysql,我正在使用一个简单的时事通讯脚本,其中一个用户可以使用不同的类别。但是我想把不同的类别放在一行,比如1,2,3 各表: 时事通讯和电子邮件 id email category 1 test@test.com 1 2 test@test.com 2 user_id email category 1 test@test.com 1,2 2 person@person.com 1
id email category
1 test@test.com 1
2 test@test.com 2
user_id email category
1 test@test.com 1,2
2 person@person.com 1
新闻通讯(分类)
id name
1 firstcategory
2 secondcategory
但我要找的是这样的:
时事通讯和电子邮件
id email category
1 test@test.com 1
2 test@test.com 2
user_id email category
1 test@test.com 1,2
2 person@person.com 1
最好的解决方案是什么
PS:用户可以在配置文件页面选择自己的类别。(可能使用Mysql更新?试试这个(完全未经测试):
试试这个(完全未经测试):
这是一个多对多关系案例。不使用逗号分隔的类别ID,而是在时事通讯\u电子邮件和时事通讯\u类别(如具有以下模式的用户\u类别)之间创建关联表:
user_id category
1 1
1 2
2 1
这样,如果用户取消订阅某个类别,就不必进行字符串处理。您只需从user_category表中删除该行。这是一个多对多关系案例。不使用逗号分隔的类别ID,而是在时事通讯\u电子邮件和时事通讯\u类别(如具有以下模式的用户\u类别)之间创建关联表:
user_id category
1 1
1 2
2 1
这样,如果用户取消订阅某个类别,就不必进行字符串处理。您只需从user_category表中删除该行。SQL和关系数据模型并不完全适用于这种情况。您可以执行以下任一操作:
- 对第一个表使用一个简单的
查询,然后在您的消费代码中,迭代结果,从第二个表中获取相应的行,并将它们组合成一个字符串(具体方式取决于您使用的语言)SELECT
- 在两个表上使用
,迭代结果集并累积表2中的值,只要表1中的ID保持不变。这比第一个解决方案更难编码,而且从数据库中提取的结果集更大,但只需一个查询即可JOIN
- 使用特定于数据库管理系统的SQL标准扩展(例如,
)来实现这一点。您将完全得到所需的内容,但SQL查询的可移植性较差GROUP\u CONCAT
- 对第一个表使用一个简单的
查询,然后在您的消费代码中,迭代结果,从第二个表中获取相应的行,并将它们组合成一个字符串(具体方式取决于您使用的语言)SELECT
- 在两个表上使用
,迭代结果集并累积表2中的值,只要表1中的ID保持不变。这比第一个解决方案更难编码,而且从数据库中提取的结果集更大,但只需一个查询即可JOIN
- 使用特定于数据库管理系统的SQL标准扩展(例如,
)来实现这一点。您将完全得到所需的内容,但SQL查询的可移植性较差GROUP\u CONCAT