Sql 使用其标记查找相关图像
这是一个将多个Sql 使用其标记查找相关图像,sql,subquery,Sql,Subquery,这是一个将多个标记连接到图像 | image_id | tag_id | |:---------|---------:| | 1 | 43 | | 1 | 34 | | 1 | 12 | | 1 | 4 | | 1 | 23 | | 1 | 5 | | 2 | 4 | | 2 | 23
标记
连接到图像
| image_id | tag_id |
|:---------|---------:|
| 1 | 43 |
| 1 | 34 |
| 1 | 12 |
| 1 | 4 |
| 1 | 23 |
| 1 | 5 |
| 2 | 4 |
| 2 | 23 |
| 2 | 53 |
| 2 | 43 |
| 2 | 24 |
| 2 | 44 |
| 3 | 5 |
| 3 | 12 |
| 3 | 4 |
| 3 | 53 |
| 3 | 44 |
| 4 | 100 |
| 4 | 120 |
| 4 | 433 |
| 4 | 532 |
| 4 | 441 |
我想写一个SQL查询,它将返回相关的图像,这些图像按最相关的图像的标签排序(它们共享的标签越多)
图像id
1
和图像id2
共享4个标签id43
,4
,23
,4
图像id1
和图像id3
共享3个标签id12
,4
,5
图像id1
和图像id4
共享0个标记id
因此,图像2
和3
将返回2
在3
之上,因为它有更多的公共标记,4
将被排除,因为它不共享任何标记
这就是我到目前为止所得到的,它似乎有效,但没有一个与最不相关的顺序
SELECT *
FROM image_tag i
JOIN tag t
ON t.tag_id = i.tag_id
WHERE i.tag_id IN (
SELECT tag_id
FROM image_tag
WHERE image_id = 1)
AND image_id != 1
你是否期望得到如下链接中的结果:
如果有的话。您可以使用该sql,也可以粘贴输出版本。我正在努力理解输入和输出。您是否可以提供另一个示例数据集,每个图像可能有5或6个相关标记?@PP。我添加了一个更大的数据集,希望有更清晰的解释。