新闻稿分类在一行中,如1,2-Mysql简单数据库设计

新闻稿分类在一行中,如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

我正在使用一个简单的时事通讯脚本,其中一个用户可以使用不同的类别。但是我想把不同的类别放在一行,比如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  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
    查询,然后在您的消费代码中,迭代结果,从第二个表中获取相应的行,并将它们组合成一个字符串(具体方式取决于您使用的语言)

  • 在两个表上使用
    JOIN
    ,迭代结果集并累积表2中的值,只要表1中的ID保持不变。这比第一个解决方案更难编码,而且从数据库中提取的结果集更大,但只需一个查询即可

  • 使用特定于数据库管理系统的SQL标准扩展(例如,
    GROUP\u CONCAT
    )来实现这一点。您将完全得到所需的内容,但SQL查询的可移植性较差


SQL和关系数据模型并不完全适用于这种情况。您可以执行以下任一操作:

  • 对第一个表使用一个简单的
    SELECT
    查询,然后在您的消费代码中,迭代结果,从第二个表中获取相应的行,并将它们组合成一个字符串(具体方式取决于您使用的语言)

  • 在两个表上使用
    JOIN
    ,迭代结果集并累积表2中的值,只要表1中的ID保持不变。这比第一个解决方案更难编码,而且从数据库中提取的结果集更大,但只需一个查询即可

  • 使用特定于数据库管理系统的SQL标准扩展(例如,
    GROUP\u CONCAT
    )来实现这一点。您将完全得到所需的内容,但SQL查询的可移植性较差