首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL:根据感知哈希相似度对结果进行分组

MySQL:根据感知哈希相似度对结果进行分组
EN

Stack Overflow用户
提问于 2018-06-15 08:50:45
回答 1查看 633关注 0票数 1

假设我们有包含以下列的MySQL表Image

  • id
  • user_id
  • p_hash

我知道如何计算新插入的行的感知散列和表中所有现有数据之间的汉明距离(以显示相似的图像)。SQL查询如下所示:

代码语言:javascript
复制
SELECT `Image`.*, BIT_COUNT(`p_hash` ^ :hash) as `hamming_distance`
FROM `Image`
HAVING `hamming_distance` < 5

我想对每个现有的图像执行相同的操作(以检查数据库中是否有类似的图像),因此,我已经遍历了Image表的每一行,执行与上面相同的过程,并从表中找到类似的图像。

现在的问题是,在整个过程之后,我希望只有当每个组的元素至少有一个不同的user_id id时才能获得相似的图像组?

因此,如果发现一组相似的图像属于一个用户,则跳过它。但如果它属于多个不同的用户,则将其作为一个结果返回。

请帮我弄清楚。

EN

回答 1

Stack Overflow用户

发布于 2018-06-15 09:15:48

听起来你想要一个自连接。

代码语言:javascript
复制
SELECT i1.id, GROUP_CONCAT(i2.id) AS similar_images
FROM Image AS i1
JOIN Image AS i2 ON i1.user_id != i2.user_id AND BIT_COUNT(i1.`p_hash` ^ i2.p_hash) < 5
GROUP BY i1.id

DEMO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50867812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档