我的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想要知道它们匹配的颜色。
所以基本上我可以做点什么,“嘿,你们都喜欢”绿色“,”蓝色“,”棕色“,”黄色“!
关于可以返回此信息的查询的最佳方法是什么?
答案 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>