0

这是一个将多个连接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 2and3会在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
4

1 回答 1

0

您是否期待您的结果类似于以下链接:

http://sqlfiddle.com/#!4/57609/3

如果是。您可以使用该 sql 或者也请粘贴您的输出版本。

于 2013-10-25T12:32:56.983 回答