Упорядочивание элементов с совпадающими тегами по количеству совпадающих тегов

Я пытаюсь понять, как упорядочить элементы с соответствующими тегами по количеству совпадающих тегов.

Допустим, у вас есть три таблицы MySQL:

  • теги (tag_id, title)
  • статьи (article_id, some_text)
  • article_tags (tag_id, article_id)

Предположим, у вас есть четыре статьи, в которых:

article_id = 1 содержит теги «юмор», «смешной» и «веселый».

article_id = 2 имеет теги «смешно», «глупо» и «тупой».

article_id = 3 содержит теги «смешно», «глупо» и «тупой».

article_id = 4 имеет тег «совершенно серьезно».

Вам нужно найти все статьи, связанные с article_id = 2 по крайней мере одним совпадающим тегом и возвращает результаты в порядке лучших совпадений. Другими словами, article_id = 3 должно идти первым, с article_id = 1 вторым, а article_id = 4 не должно отображаться вообще.

Это что-то, что можно сделать в SQL-запросах или самостоятельно, или это лучше подходит для чего-то вроде Sphinx? Если первое, то какой запрос следует выполнить и какие индексы следует создать для получения наиболее эффективных результатов? В последнем случае просьба расширить.

10
задан Josh Smith 24 September 2010 в 02:57
поделиться