MySQL如何检查多个值,并返回与它们匹配的行和信息

时间:2012-07-11 00:33:26

标签: php mysql

我的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)

但是,我想让结果重新排序,哪些行匹配最多,而id想要知道它们匹配的颜色。

所以基本上我可以做点什么,“嘿,你们都喜欢”绿色“,”蓝色“,”棕色“,”黄色“!

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

1 个答案:

答案 0 :(得分: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,您需要计算匹配的颜色数量。数字越大,匹配越好<​​/ p>