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 2
andは、共通のタグが多く、タグを共有していないため除外されるため、上にある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