Решение заключается в том, чтобы использовать Daget.StrongName вместо Dapper.
Этот запрос должен возвратить идентификатор видео (v2), которые имеют теги вместе с Вашим данным видео (v1), в порядке убывания количества тегов вместе.
SELECT v2.video_id
FROM VideoTags AS v1
JOIN VideoTags AS v2
USING (tag_id)
WHERE v1.video_id = ?
AND v1.video_id <> v2.video_id
GROUP BY v2.video_id
ORDER BY COUNT(*) DESC;
Очень интересный вопрос.
Это просто думает вслух, но некоторые опции, о которых я могу думать:
1) Используйте все теги - например, воображают запросы для списка видео, которые имеют каждый тег, который делает это видео. Произведите список видео, заказанных количеством количества тех списков, они появляются на, т.е. количество того, сколько тегов они имеют общего с этим видео. С большим количеством тегов вместе, по-видимому, 'более связаны'.
(Я не предлагаю, чтобы Вы сделали несколько запросов в действительности, просто пытаясь объяснить, что я имею в виду..., кто-то с лучшим SQL-fu, чем я может, вероятно, придумать единый запрос, который делает это. Возможно, можно дополнительно приказать по популярности или другой информации, чтобы Вы могли иметь).
2) Попытайтесь идти с алгоритмом, который позволяет связанным видео естественно появиться, а-ля амазонка 'люди, которые купили, это также купило это'. Например, если Вы отслеживаете, кто просмотрел то, что, Вы можете разрабатывать запрос, который производит такой список.