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和颜色名称。
下一个表将是关联表。每一行都是一个用户ID和一个颜色ID,表示该用户喜欢该颜色。
然后,一个类似于的查询
SELECT userID, COUNT(colourID) FROM associationTable
WHERE colourID IN (<list of IDs that belong to user of interest)
GROUP BY userID
对于每个userID
,您都会有一个匹配的颜色数量的计数。数字越高,匹配越好