mysql - 如何通过字段的子值之一查询 MySQL?

标签 mysql

假设有一个表,有这些行:

-personID,
-personName,
-personInterests

还有一个表,里面存放的是兴趣:

-interestID
-interestName

一个人可以有多个兴趣,所以我把interest数组serialize()-d或者JSON表示放到了兴趣字段。这不是 String,如“reading”,而是 interests 表的索引,该表存储了可能的兴趣。类似于一个字段中的多个外键。

最好的方法是使用外键,但不可能实现一个字段中的多个引用...

如何运行这样的查询,没有 REGEX 或通过软件拆分字段的内容?如果将索引放在一个字段上不是可行的方法,那么如何实现这样的结构呢?

最佳答案

绝对不建议在一个字段中存储多个索引或任何引用。 您必须创建一个我称之为“会合”表的东西。

在你的情况下它有:

 - ID
 - UserID (foreign key)
 - InterestID (foreign key)

每个人都可以有多种兴趣,所以当一个人为自己添加新的兴趣时,您只需在该表中添加一个新行,该行将通过外键引用该人和所需的兴趣 不为空

在有太多可用变体的大型项目中,建议不要为该表提供 ID 行,而是设置两个 外键 也是 primary keys,所以不可能重复,table-index 会更小,而且在查找的情况下,它会消耗更少的代价计算能力。

所以最好的解决方案是这样的:

 - UserID (foreign key AND primary key)
 - InterestID (foreign key AND primary key)

关于mysql - 如何通过字段的子值之一查询 MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18093485/

相关文章:

php - 在数据库中存储 session

java - 如何使用 JSP 在 mysql 中显示 BLOB?

mysql - SQLException java.sql.SQLException : Field 'userid' doesn't have a default value 异常

c# - 从数据库中选择指定日期范围内的数据

Mysql插入查询以不同的顺序存储数据

mysql - SQL表一次又一次接受相同的名称数据库名称检查

mysql - 更新 SELECT 语句返回的行的值

php - css中高度的条件语句

mysql - cfc 中的查询在本地返回 [n] 项,但在实时站点上重复第一个元素 [n] 次

mysql - 如何在node.js中使用两个数据库连接? (mysql)