比较属性集以找到最佳匹配

2024-02-04

似乎有类似的问题,但又不完全是。我尝试走这条路(比较数据集并返回最佳匹配 https://stackoverflow.com/questions/1370565/compare-data-sets-and-return-best-match),但发现自己被难住了。

我需要接受一组并找到最匹配的一组。假设我们有包含值 (1, 4, 29, 44, 378, 379) 的 search_obj。我想找到具有相似值的其他对象,并且最好找到与此最匹配的对象。将会有大量其他对象,因此性能是一个大问题。

我目前正在使用 php 和 mysql,但如果这意味着更好的性能,我愿意改变它。

感谢您的任何帮助。


我刚刚想到:

假设您有一个唯一对 (a, b) 的表:

CREATE table t1 (a INT, b INT, PRIMARY KEY (a, b));

现在你用以下内容填充它:

INSERT INTO t1
VALUES (1,1), (1,2),               -- item to compare with
       (2,1), (2,3),               -- has one common prop with 1
       (3,1), (3,2),               -- has the same props as 1
       (4,1), (4,2), (4,3), (4,4); -- has 2 same props with 1

以下查询将根据相似性对其他项目进行排序:

SELECT t1.a,
    COUNT(t2.a) as same_props_count,
    ABS(COUNT(t2.a) - COUNT(*)) as diff_count
FROM t1
LEFT JOIN t1 as t2 ON t1.b = t2.b and t2.a = 1
WHERE t1.a <> 1
GROUP BY t1.a
ORDER BY same_props_count DESC, diff_count;


a, same_props_count, diff_count
3, 2,                0
4, 2,                2
2, 1,                1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较属性集以找到最佳匹配 的相关文章

随机推荐