如何在确定的日期从我的数据库中获取数字结果

时间:2013-10-18 17:33:10

标签: mysql sql count group-by distinct

首先,我不擅长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

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

SQL Fiddle Demo