Вот таблица, которая соединяет множественные 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 ID 1
и ID изображения 2
доля 4 Идентификатор тега в 43
, 4
, 23
, 4
Image ID 1
и ID изображения 3
доля 3 тега Идентификаторы 12
, 4
, 5
Изображение id 1
и изображение ID 4
доля 0 тег идентификаторы
Так изображение 2
и 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
Я изо всех сил стараюсь понять входы и выходы. Можете ли вы предоставить другой примерный набор данных, возможно, с 5 или 6 связанными тегами на изображение? –
@PP. Я добавил более обширный набор данных и, надеюсь, более четкое объяснение. – jamcoupe