首先,我不擅长sql,所以要温柔;)
所以我有两张桌子:
查看:
- id_view
- 日期
- IP
- id_article
ARTICLE
- id_article
- id_user
- 日期
- ......和其他东西......
我想要的是获得有更多观点的3篇文章的数量和细节。
我尝试过没有成功的声明如下:
SELECT COUNT(DISTINCT view.id_article)
, view.id_article
, article.date category_name
FROM view , article
WHERE view.id_article=article.id_article
AND article.date="2013-10-18"
GROUP BY id_article LIMIT 3
但我没有得到我真正想要的结果,因为它只显示该日期的一篇文章的结果。也就是说,我知道第1条当天有1个观点,但我有另一篇文章在那一天得到了意见。
我真的认为这很简单,但我可以自己弄清楚......:/
提前致谢。
编辑:
找到答案:
SELECT COUNT(view.id_article), view.id_article
FROM view , article
WHERE view.id_article = article.id_article
AND view.date = "2013-10-18"
GROUP BY id_article
LIMIT 3
答案 0 :(得分:0)
我仍然不确定我是否正确回答你的问题......但是这里有。
select a.id_article, count(1)
from article a inner join view v on v.id_article=a.id_article
where v.date="2013-10-18"
group by a.id_article
order by count(1) desc
limit 3
这将为您提供在where子句中指定的日期中查看次数最多的3篇文章的id_article。希望这是你想要的......
只是发布脚本,视图和日期是保留字,最好不要将它们用作列名或表名。
答案 1 :(得分:0)
我认为这会对你有所帮助:
select * from article where article_id in
(
select article_id from
(
select count(*) as a, article_id
from view
where date = '[Pass your date here]'
group by article_id
order by a desc
limit 3
) as C
)
此代码的缺点是您无法根据视图数量保留文章的降序。
答案 2 :(得分:0)
试试这个
SELECT a.*, g.count
FROM
(SELECT COUNT(1) as count , id_article
FROM view
WHERE date = "2013-10-18"
GROUP BY id_article ) g
INNER JOIN article a ON a.id_article = g.id_article
ORDER BY g.count DESC LIMIT 3