【问题标题】:How to get the number results from my database on a determined date如何在确定的日期从我的数据库中获取数字结果
【发布时间】:2013-10-27 15:43:25
【问题描述】:

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

【问题讨论】:

  • 必须澄清...您是否正在寻找所有具有 3 次或更多浏览量的文章?还是只有 3 篇浏览量最高的文章?这个查询实际上会在除 MySQL 之外的任何数据库上失败(返回错误),您的 group by 并不完全正确......mysql 更喜欢在返回错误之前悄悄地返回“不正确”的结果
  • 3 篇文章在特定日期获得更多浏览量。我知道“分组依据”是不正确的,但我不知道如何使它变得好大声笑
  • 哦,所以在示例中,您想要 3 篇文章在 2013-10-18 的浏览量比其他任何一天都多?
  • 文章 1 在第 18 天获得了 1 次浏览,在第 19 天获得了 2 次浏览。文章 2 在第 18 天获得了 2 次浏览,在第 19 天获得了 4 次浏览。如果我搜索第 18 天浏览次数最多的文章,我将得到这两个,因为其他人没有得到任何意见。第 19 天也是如此。
  • 您的回答似乎与您给我的要求不符,它只会给您当天随机查看的三篇文章……除非您要求。扩展您的测试集以包含 3 条以上的记录,您就会明白我的意思了。

标签: mysql sql count group-by distinct


【解决方案1】:

我仍然不确定我是否正确回答了您的问题……但这里是。

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。希望这是你想要的...

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

【讨论】:

  • 没用,但我已经找到了答案。感谢您的帮助;)
  • @Twelfth,你的回答中有一种错字,检查 from 行,你在内部之后有表格文章别名“a”,修复它会正常工作。
【解决方案2】:

我认为这会对你有所帮助:

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
)

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

【讨论】:

    【解决方案3】:

    试试这个

    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

    【讨论】:

    • @Th3lmuu90,我认为您在问题中提出的解决方案不起作用,因为它在应用限制 3 之前没有对结果进行排序
    猜你喜欢
    • 2019-10-08
    • 1970-01-01
    • 2020-04-01
    • 2018-04-01
    • 1970-01-01
    • 2015-11-09
    • 2019-07-11
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多