SQL-запрос для поиска статей хотя бы с одним из перечисленных тегов - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть 3 таблицы: article, теги и article_tag (тот, который их связывает).

Я хочу найти все статьи, в которых есть некоторые (или все) теги, перечисленные в запросе, и упорядочить их по количеству совпадающих тегов. Возможно ли это?

Пример на английском:

Query: Find me all articles that have at least one of these tags "jazz, bass guitar, soul, funk", order them by the number of matched tags.

Output:
Article 1 (jazz, bass-guitar, soul, funk)
Article 2 (jazz, bass-guitar, soul)
Article 3 (jazz, bass-guitar)
Article 4 (funk)

Ответы [ 2 ]

3 голосов
/ 11 февраля 2010

Возможно что-то вроде этого:

select articles.article_id, count(tags.tag_id) as num_tags, group_concat(distinct tag_name separator ',') as tags
from articles, article_tag, tags
where articles.tag_id = article_tag.tag_id
  and article_tag.tag_id = tags.tag_id
  and tags.tag_name in ( 'jazz', 'funk', 'soul', 'Britney Spears' )
group by articles.article_id
order by count(tags.tag_id) desc
1 голос
/ 11 февраля 2010
select a.* from articles a,
 (select article_id, count(*) cnt from article_tag at, tag t
  where t.name in ('jazz', 'bass-guitar', 'soul', 'funk')
  and at.tag_id = t.tag_id
  group by article_id) art_tag
where a.article_id = art_tag.article_id
order by art_tag.cnt desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...