我有2个PostgreSQL表,文章和投票。每篇文章都可以随时进行多次投票。因此表格如下:
文章:
ID, Title, Content
1, Title, Content
2, Title, Content
3, Title, Content
投票:
ID, ArticleID, UserID, Created_at
1, 1, userA, 1489266747
2, 1, userB, 1489266757
3, 2, userC, 1489266767
现在我想:
有任何建议怎么做?我想我需要使用左连接,但仍然无法选择最新的选票。
答案 0 :(得分:1)
你走了:
SELECT ID, Title, Content,
(SELECT count(*) FROM Votes WHERE ArticleID = Article.OD AND Created_at >= UNIX_TIMESTAMP() - 86400) as votes_24h
FROM Article
ORDER BY votes_24h DESC;
答案 1 :(得分:1)
ORDER BY
中:
select a.*
from articles a
order by (select count(*)
from votes v
where v.ArticleId = a.id and
v.CreatedAt >= extract(epoch from now()) - 24*60*60
) desc;
就个人而言,我希望看到SELECT
中的投票数,但你明确没有要求提供这些信息。
答案 2 :(得分:0)
您可以使用LEFT JOIN,按文章分组并按COUNT()
订购:
select a.ID, a.Title, a.Content
from Article a
left join Votes v
on v.ArticleID = a.ID
and v.Created_at >= extract(epoch from now()) - 24*60*60
group by a.ID, a.Title, a.Content
order by count(v.ArticleID) desc, a.ID
请注意,24h条件需要在ON子句中才能显示过去24小时内没有投票的文章。
您还可以将计数添加到SELECT子句并按别名排序:
select a.ID, a.Title, a.Content, count(v.ArticleID) as voteCount
from Article a
left join Votes v
on v.ArticleID = a.ID
and v.Created_at >= extract(epoch from now()) - 24*60*60
group by a.ID, a.Title, a.Content
order by voteCount desc, a.ID;