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


MySQL how to check multiple values, and return the rows and information on what matched them

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,您都会有一个匹配的颜色数量的计数。数字越高,匹配越好