0

我的 MySQL 设置中的一列称为 favColors。它只是一个 VARCHAR 列,我在其中为每个用户保存一个带有 favColors 的 JSON 字符串。很简单。

假设这是用户 A 的favColors["red","green","cyan","silver","gold"]

这是用户 B 的favColors["pink","green","blue","brown","yellow"]

这是用户 C 的favColors["tan","green","blue","brown","yellow","violet"]

用户 B 想查询其他颜色相同的用户。但我有兴趣找到最佳匹配。

我想我可以使用这样的东西...... WHERE MATCH (favColors) AGAINST ('$userBsJSONString' IN BOOLEAN MODE)

但是,我想让结果重新调整,按哪些行匹配最多,并且我想知道它们匹配的是什么颜色。

所以基本上我可以做类似“嘿,你们都喜欢“绿色”、“蓝色”、“棕色”、“黄色”之类的事情!

进行可以返回此信息的查询的最佳方法是什么?

4

1 回答 1

0

您不能使用当前的数据布局。

你在这里得到了非常不规范的数据。要进行所需的分析,您还需要两个表。

第一张桌子是彩色的。每种颜色都有一个唯一的 ID 和颜色名称。

下一个表将是一个关联表。每行将是一个用户 ID 和一个颜色 ID,表示该用户喜欢该颜色。

然后,像这样的查询:

SELECT userID, COUNT(colourID) FROM associationTable 
   WHERE colourID IN (<list of IDs that belong to user of interest)
   GROUP BY userID

对于每个userID,您都会计算匹配的颜色数量。数字越高,匹配越好

于 2012-07-11T01:41:12.227 回答