У меня есть арт-сайт. Мне нужно показать похожие произведения искусства сейчас. У меня есть 3 таблицы:
art_info : art_id, title
art_tag_relationship : art_id, tag_id
art_tags : tag_id, tag (in text)
Я пытаюсь получить сопутствующее искусство для данного произведения искусства, отсортированное по наиболее подходящим тегам.
Итак, давайте представим, что у меня есть 5 произведений искусства с тегами
теги art # 1: красный, синий, зеленый, желтый
теги art # 2: красный, оранжевый, фиолетовый, черный, желтый, синий
теги art # 3: красный
теги art # 4: синий, зеленый
теги art # 5: белый, коричневый
Итак, теперь я хочу получить наиболее похожие произведения искусства для искусства # 1 в порядке, наиболее совпадающем с наименее подходящим. Я жду, чтобы получить такие результаты
Уровень техники, связанный с # 1:
- Лучшее совпадение = art # 2 (потому что оно соответствует 3 тегам)
- 2-е совпадение = art # 4 (потому что оно совпало с 2 тегами)
- 3-й матч = art # 3 (потому что он соответствует 1 тегу)
- Не отображать искусство # 5, так как совпадений не найдено.
Я думал об использовании оператора foreach, как только я получу теги для art # 1, но это кажется неэффективным.
Вот запрос, который я использовал для получения тегов для art # 1
SELECT art_info.art_id, art_info.title
FROM art_info
INNER JOIN art_tag_relationship ON art_info.art_id = art_tag_relationship.art_id
WHERE art_tag_relationship.art_id = '1'
Так что теперь, когда у меня есть 4 тега из рисунка № 1, как мне получить больше всего произведений с наиболее похожими тегами?
Спасибо за ваше время и использование мозга.
РЕДАКТИРОВАТЬ: Концепция, кажется, получить теги для art # 1 через art_tag_relationship -> art_tags, а затем получить art_id из art_tag_relationships, где tag_id совпадают с найденными тегами для art_id # 1 в art_tag_relationships.