php - 我应该如何将这些多个值存储在我的 MySQL 表中?

标签 php mysql database-design

我正在为一个新网站设计数据库,用户可以在该网站上选择许多他们喜欢的音乐流派。每个流派都有一个与之关联的 ID,因此如果约翰喜欢流行、摇滚和 R&B,他会喜欢 1、2 和 3。

将这些存储在用户表中的最佳方式是什么?

现在我有这样的:

genre_id | user_id
------------------
1,2,3    | 1

在 php 中,我在逗号分隔符上展开这些值,并以这种方式获取各个 id。但这显然不是正确的做法。

我知道我可以有一个名为“genre_to_user”的单独表,对于 John 喜欢的每种类型,我可以像这样在该表中输入一个条目:

genre_id | user_id
------------------
1        | 1
2        | 1
3        | 1

为了获得 John 喜欢的所有内容,我可以执行 SELECT * FROM 'genre_to_user where user_id = 1

但我认为从长远来看,当该表中充满大量记录时,这不会非常有效。由于我将在同一页面上最多有 30 个用户的列表页面上为每个用户进行一次此计算。这些页面遍布整个网站。

那么什么是正确(并且有效)的方法呢?

此外,在 mysql 中是否有任何数据类型用于存储逗号分隔值,而不是仅仅将它们粘贴在 varchar 字段中?

最佳答案

您应该使用像您描述的 genre_to_user 这样的交叉引用表。这将使您的数据库更快地搜索记录。

不要太担心“大量的记录”,这就是数据库的用途:-)

关于php - 我应该如何将这些多个值存储在我的 MySQL 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10459663/

相关文章:

php - Azure Web 应用程序 - 您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展

mysql - SQL 存储过程 - 变量太短

mysql - 处理许多列的数据库

mysql - 将文件关联到数据库任何表中的任何行

sql-server - 在我的 sql 数据库中存储自定义报告设置的推荐模式/数据库设计是什么?

php - 从 MySQL 值创建可变变量

php - 是否有可能使用 PHPUnit 模拟对象来调用神奇的 __call() 方法?

php - 是否可以将sharedpreference中的数据插入mysql数据库?

php - 取消选中先前选中的复选框时删除行

javascript - 如何使用 Javascript 获取多个输入字段的值