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

时间:2013-08-07 02:10:07

标签: mysql

我们假设有一个表格,其中包含theese行:

-personID,
-personName,
-personInterests

还有另一张表,存储了兴趣:

-interestID
-interestName

一个人可以有多种兴趣,因此我将serialize()的{​​{1}} - d或JSON表示放入interest array字段。这不是interest,而是“阅读”,而是String表的索引,它存储了可能的兴趣。像一个字段中的多个外键一样。

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

如何运行此类查询, interests或通过软件拆分字段内容?如果将索引放到一个字段中是不可取的,那么如何实现这样的结构呢?

2 个答案:

答案 0 :(得分:3)

严格不建议在一个字段中存储多个索引或任何引用。 你必须创建一些我称之为“rendezvous”表的东西。

在你的情况下它有:

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

每个人都可以有多种兴趣,所以当一个人为自己添加新的兴趣时,你只需在这个表中添加一个新行,该行将引用该人和所需的外键感兴趣{{ 1}}。

对于大型项目,如果可用的变体太多,建议不要向此表格提供NOT NULL行,而是设置两个ID foreign keys因此,重复将是不可能的,primary keys将更小,并且在查找的情况下,它将从昂贵的计算能力中消耗更少。

所以最好的解决方案就是:

table-index

答案 1 :(得分:1)

我相信你可以实现这个的唯一方法是创建一个第三个表,它实际上会被一个触发器更新(类似于Gabor Dani建议的那样)

Table1 
-personID,
-personName,
-personInterests

Table2 
-interestID
-interestName

Table3 
-personInterestID (AutoIncrement Field)
-personID
-interestID

然后你需要编写一个触发器,这样做可能需要一个存储过程,因为你需要遍历字段中的所有值。