SQL - сложный поисковый запрос
Мне нужна помощь со сложным запросом. у меня есть Venues
стол, Tag
стол и Venues_Tag_lookup
Таблица. Когда у меня есть детали одного места на экране, я хотел бы иметь возможность показывать другие места, которые похожи на текущее место.
Для этого потребуется запрос, который возвращает 5 лучших мест с наибольшим количеством совпадающих тегов. (Я использую MSSQL)
Вот простой макет того, как выглядят мои таблицы.
Venues_tbl
----------
VenueId
Venue_name
Tag_tbl
---------
TagId
Tag_name
Venues_Tag_lookup
------------------
Venue_tagId
VenueId
TagId
Если у вас есть какие-либо вопросы, пожалуйста, задавайте.
Заранее спасибо.
2 ответа
Решение
SELECT TOP 5
V.Venue_name
FROM
-- this = tags for this venue
Venues_Tag_lookup this
JOIN
-- others = tags for other venues
Venues_Tag_lookup others
--see what matches, there will be a big pile of them
ON this.TagId = others.TagId
JOIN
Venues_tbl V ON others.VenueID = V.VenueID
WHERE
--filter to this and others
this.VenueID = @TheOneOnScreen
AND
others.VenueID <> @TheOneOnScreen
GROUP BY
--collapse to other venues ...
V.Venue_name
ORDER BY
-- ... and simply COUNT matches
COUNT(*) DESC
Следующий запрос может помочь:
- params = @venueId, @tagId Выбрать venueId, venueName, (выберите count * из venues_tag_lookup vtl, где vtl.venueid=v.venueid)tagCount от venues_tbl v где место проведения в (выберите venueId из Venues_tag_lookup, где tagId = @tagId) и venueId @venueId заказать по 3 дес