这是一个将多个连接tags
到一个的表image
| 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 查询,该查询将返回相关图像,这些图像按与另一个最相关的标签排序(它们共享的标签越多,它就会越高)。
Image id1
和 image id2
共享 4 个标签 id 43
, 4
, 23
,4
图像 id1
和图像 id3
共享 3 个标签 id 12
, 4
,5
图像 id1
和图像 id4
共享 0 个标签 id
所以 image 2
and3
会在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