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


How should I store these multiple values in my MySQL table?

我正在为一个新网站设计数据库,用户可以在其中选择一些他们最喜欢的音乐流派。每个流派都有一个与之关联的ID,所以如果John喜欢流行,摇滚和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

为了得到约翰喜欢的所有东西,我可以做一个SELECT * FROM 'genre_to_user where user_id = 1

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

那么,解决这个问题

的正确(和有效(方法是什么?

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

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

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

创建与您描述的genre_to_user类似的交叉引用表具有允许反转搜索的额外好处。换句话说,您可以找出哪些用户或有多少用户的genre_id为 1。

相关文章: