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