我不确定这是否可行;但我在MySQL数据库中有数以百万计的“列表”,并希望开发一个系统,我可以从中获取其中一个列表;并将其与数据库中的所有其他列表进行比较并返回:
1。)与主要列表非常相似的列表(某种%会很好)
2.)给出列表中的某些项目;它将返回包含在所有其他列表中的大多数列表中的项目列表(即,根据常用选项自动完成列表)。
我会初步认为如果我可以创建某种'松散哈希',我可以用数学方式比较列表,但我无法找到可扩展的解决方案(因为这是正面处理指数时。)
非常感谢任何新的想法/解决方案。谢谢!
答案 0 :(得分:0)
你的基本MD5是一个(有点)松散的哈希,由php和mysql支持,并且在这些事情上相当快。只需获取有关数据的MD5并将其与其他数据进行比较。
在PHP中执行,将数据的MD5存储在数组键中如果是isset()则使用。
答案 1 :(得分:0)
你的部分 2)给定列表中的某些项目;它将返回包含在所有其他列表中的大部分内容的项目列表(即,根据常用选项自动填充列表)。
不是很清楚,但我将其解释为:给定少量项目,找到包含所有或大部分项目的所有列表。
在列表元素上创建索引后,这应该很简单,基本上就像哈希表一样。确切的查询将取决于您的要求,列表的长度(这是否是定义规范的因素等)。
答案 2 :(得分:0)
如果你说有数百万个列表,那么将它们全部加载到php脚本中并不是一个选项。 您可以获取要与其他列表进行比较的列表的值,然后运行类似于此的SQL查询:
SELECT list_id, COUNT(value) as c FROM lists WHERE value IN (a,b,c) GROUP BY list_id
ORDER BY c DESC
我不确定sql是否正确,但我们的想法是选择其中包含相同成员的列表的ID,然后按照与原始列表相交的列表项的数量对输出进行排序。在这种情况下,很容易获得项目对应的百分比。