0

tags複数を 1 つに接続するテーブルを次に示します。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クエリを作成したいと思います(共有するタグが多いほど、高くなります)。


画像 ID1と画像 ID2は 4 つのタグ ID を共有します43, 4, 23,4

画像 ID1と画像 ID3は 3 つのタグ ID を共有します12, 4,5

画像 ID1と画像 ID4は 0 個のタグ ID を共有しています

image 2andは、共通のタグが多く、タグを共有していないため除外されるため、上にある3と返されます。234


これは私がこれまでに得たものであり、機能しているように見えますが、最も関連性の高い順序がありません。

    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 に答える