Как выбрать самые часто упоминаемые тэги из базы данных с помощью SQL?
Добрый день!
У меня есть таблица в базе данных Tags в которой хранятся все теги(они уникальны, то есть нет две записи в этой таблице с одинаковым тегом)
Есть таблица Posts
Есть таблица Posts_Tags в которой пролинкованы теги и посты
например есть тэг #машина у которого id= 5
и в Post_Tags с этим тегом связаны посты с id=7 id=10 и так далее
Вот так
posts tags
7 ---------5
10--------5
20--------5
Я хочу выбрать все записи за последний час, в которых одни тэги упоминались чаще других.
Теоретически я могу выбрать из БД все тэги за последний час а потом в коде их отсортировать, но может есть способ проще? Подскажите примерно как я могу это реализовать?
select
top 100
tags,
COUNTposts
from
(
select tags, COUNT( posts ) as COUNTposts
from Posts_Tags
where (указываешь диапазон времени)
group by tags
) x
order by COUNTposts
Либо убираешь top 100 и пишешь условие для выборки.
Можно конечно через HAVING еще упростить. Но не знаю есть ли он на MySQL и Postgresql...
select
p.id,
t.tags,
t.count_tags
from Posts p
inner join
(
select
posts,
tags,
count(tags) as count_tags
from Posts_Tags
group by posts, tags
) t on t.posts = p.id
where p.date = (за последний час)
order by t.count_tags, p.id