сложная выборка для работы тагов (псевдосхожие новости)

oldboy

Новичок
сложная выборка для работы тагов (псевдосхожие новости)

Цель: в системе публикации новостей отображать новости схожие по сюжету, решение - каждая новость описывается 1-5 ключевыми словами, какдой новости создается привязка с ключевым словом.

Подробно:

Есть таблица новости:
id_новости;новость
пример:
1;пожар в городе
2;авария на мосту
3;подешевела картошка

есть таблица тагов (ключевые слова описывающие событие, например по верхнему примеру это:

id_тага;таг

1;пожар
2;мост
3;авария
4;картошка
5;цена

есть таблица связи тагов и новостей,

id_новости;id_тага

т.е. по вышеприведенному примеру это будет
1;1
2;2
2;3
3;4
3;5

Нужно выбрать idшники новостей имеющих максимальное число совпадающих тагов, т.е.
новость про аварию на посту с тагами "авария, мост, машина" и новость с аналогимными тагами должа ORDER'иться DESC'ее чем новость которой соответствует два тага или один. В какую сторону копать, подскажите если не затруднит.
 

alpine

Новичок
oldboy
[sql]
SELECT tn.news_id, COUNT(tn.tag_id) as cnt FROM tags_news as tn
LEFT JOIN tags as t ON(tn.tag_id=t.tag_id)
WHERE t.tag IN('авария','мост', 'машина')
GROUP BY news_id ORDER BY cnt DESC
[/sql]
 

oldboy

Новичок
Благодарю, работает, это оптимальный по скорости вариант или вообще единственный?
Просто >10000 новостей и около 6000 тагов в системе с ~50000 хитави в сутки, оно конечно в smarty кешируется на час, но все-же.
 

alpine

Новичок
oldboy
С подзапросом и при правильных индексах будет работать быстрее.
 
Сверху