0

首先,我不擅长sql,所以要温柔;)

所以我有两张桌子:

看法:

  • id_view
  • 日期
  • ip
  • id_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
4

3 回答 3

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 小提琴演示

于 2013-10-18T18:01:09.217 回答
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。希望这是你想要的...

just post script, view 和 date 都是保留字,最好不要作为列名或表名。

于 2013-10-18T17:50:12.300 回答
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
)

此代码的缺点是您无法根据查看次数保留文章的降序。

于 2013-10-18T17:58:30.397 回答