Mysql 在30000多个数据集之间查找匹配项

Mysql 在30000多个数据集之间查找匹配项,mysql,sql,algorithm,graph-algorithm,Mysql,Sql,Algorithm,Graph Algorithm,为了简单起见,让我们举一个3种颜色和相应数字的例子,在现实生活中实际上有30000多种不同的“颜色”和254种不同的“数字” 红色-0,1,2,3,10,15 绿色-0,2,3,20 蓝色-2,10,11,12 我想找到它们之间的匹配项rgb、rg、rb,并记录集合之间共享的s的数量: rgb=1 rg=2 rb=2 最后,它需要确定共享的s的数量与集合中不同的s的数量的比率 rgb=1/9,因为它有一个不同的值:0、1、2、3、10、11、12、15、20 rg=2/70,1,2,3,10,1

为了简单起见,让我们举一个3种颜色和相应数字的例子,在现实生活中实际上有30000多种不同的“颜色”和254种不同的“数字”

红色-0,1,2,3,10,15

绿色-0,2,3,20

蓝色-2,10,11,12

我想找到它们之间的匹配项rgb、rg、rb,并记录集合之间共享的s的数量:

rgb=1

rg=2

rb=2

最后,它需要确定共享的s的数量与集合中不同的s的数量的比率

rgb=1/9,因为它有一个不同的值:0、1、2、3、10、11、12、15、20

rg=2/70,1,2,3,10,15,20

rb=2/80,1,2,3,10,11,12,15

因此,总产量将是

匹配项|个匹配项|%|

rgb | 1 | 1/9

rg | 2 | 2/7

rb | 2 | 2/8

我能想到的算法是,在一个表中有每种颜色,并映射与之相关的数字,即红色表名,0,1,2,3,10,15数据。然后选择“数字”最多的颜色,与其他颜色的小时数进行比较,找出匹配的颜色。使用该颜色后,您可以100%忽略它,然后转到下一种颜色,并与n-1进行比较

例如:

1选择红色

2其他颜色是否共享0

3其他颜色有相同的颜色吗1

……等等

4选择蓝色 5.除红色外,还有其他颜色吗

我知道必须有一个更有效的方法来做到这一点,有什么建议吗


谢谢您的帮助。

因为只有254或255个,如果您的0-254注释正确,那么您可以将每个“颜色”的“数字”集表示为256位整数。那么r和g的共享数就是r和b的比特数,而不同数的数目就是r或b的比特数,所以用你的例子

如果R是红色的位集,G是B等的位集:

match | # of matches            | %                                             |
rgb   | bitcount(R and G and B) | bitcount(R and G and B)/bitcount(R or G or B) |
rg    | bitcount(R and G)       | bitcount(R and G)/bitcount(R or G)            |
rb    | bitcount(R and B)       | bitcount(R and B)/bitcount(R or B)            |

什么是红色、绿色和蓝色?桌子?柱?文件?对值进行三向外部联接,然后根据哪些列为空,从该结果中收集聚合数据红色、绿色和蓝色仅显示一个示例。我实际拥有的是一组30000+的报警条件,以及相应的“小时”值,范围为0-254。我想把它们都配在一起。所以在数据库方面,我可以将其存储为:数据库是彩色的,表是红色的,数据1列:0,1,2,3,10,15一个示例数据集是:afaGenericAlarm-0,20,34,50,100,250。每个警报只能有一个数字。@Mattwipple我希望我能做一个外部连接,但你说的是30000路外部连接。此外,数据是动态的,因此数字将不断增加。@ColinBookman颜色可以表示为256位整数吗?或4x64位整数,或8x32位等?然后,您可能可以在计算中使用按位AND和OR。