【问题标题】:MySQL / PHP: Date functions for page view statistics and popularityMySQL / PHP:用于页面查看统计和流行度的日期函数
【发布时间】:2010-11-15 12:11:26
【问题描述】:

我有一张表,其中包含每天的页面浏览量。像这样的:

+------+------------+------+
|  id  | date       | hits |
+------+------------+------+
| 4876 | 2009-07-14 | 4362 |
+------+------------+------+
| 4876 | 2009-07-15 | 1324 |
+------+------------+------+
| 7653 | 2009-06-09 | 5643 |
+------+------------+------+

我需要创建一个函数来比较过去两周的总点击量并获取变化的百分比(流行度)。

如果第一周我有 1000 次点击,第二周我有 2000 次点击,那么我的人气就 +200%

[ (1000 * 2000) / 100 ] = 200

如果第一周我的点击次数比第二周多,那么受欢迎程度将是负数(例如 -80%)

我有一些问题:

1) 我使用了正确的数学公式??

2) 从现在开始的最后两周我如何在 MySQL 中进行选择?

3) 可能第一周我们有命中,但第二周根本没有命中,因此对于那些日期或没有命中的特定日期,表格行将是空的。这是一个问题吗?

4) 我确信有更好的方法来做这种统计。一些更好的想法????

【问题讨论】:

    标签: php mysql database datetime statistics


    【解决方案1】:

    1) 不完全是。我想你想要百分比变化。从 1000 次点击到 2000 次点击是增加了 100%,而不是 200%。你想要 ((2000 - 1000)/100);

    2) 两周前:SELECT SUM(hits) as s FROM tbl WHERE date>=NOW() - INTERVAL 2 WEEK AND date<NOW()-INTERVAL 1 WEEK

    一周前:SELECT SUM(hits) as s FROM tbl WHERE date>=NOW()-INTERVAL 1 WEEK

    3) 不适用于上面的查询。任何日期间隔都不会成为SUM() 的一部分。

    4) 这种方法实际上对我来说似乎还不错。它应该可以完成工作。

    【讨论】:

    • 通过这个查询,我得到了两周的总和。我需要第一周的总和,然后是第二周的总和。我需要每周使用两个查询,还是有更好的方法?
    • 哦,我明白了。我肯定会使用两个查询。我会稍微修改一下。
    【解决方案2】:

    使用这个:

    <?php
    function fetch($sql)
    {
        $query = mysql_query($sql);
        return mysql_fetch_assoc($query);
    }
    
    function calculate($week1, $week2)
    {
        if ($week1 == 0)
        {
            $week1 = 1;
        }
        return ($week2 / $week1) * 100;
    }
    
    $q1 = "SELECT SUM(hits) as hits FROM table WHERE DATE_SUB(CURDATE(),INTERVAL 1 week) <= date";
    $first_week_hits = fetch($q1);
    
    $q2 = "SELECT SUM(hits) as hits FROM table WHERE DATE_SUB(CURDATE(),INTERVAL 2 week) <= date";
    $second_week_hits = fetch($q2);
    
    $percent = $str_percent = calculate($first_week_hits['hits'], $second_week_hits['hits']);
    if ($percent > 0)
    {
         $str_percent = '+'.$percent; // :)
    }
    echo "I have ".$str_percent."% of popularity";
    ?>
    

    【讨论】:

    • 这行得通,谢谢!!!但是,如果我想从昨天开始而不是从今天开始获得点击总数怎么办。我的意思是,从昨天算起两周,而不是从今天算起。我用“DATE_SUB(date,INTERVAL 1 day)”替换了“
    • 简单的方法是将所有 "DATE_SUB(CURDATE(),INTERVAL..." 更改为:"DATE_SUB(DATE_SUB(CURDATE(),INTERVAL 1 day),INTERVAL..." :) 好运气!
    【解决方案3】:

    如果第一周我有 1000 次点击,并且 第二周 2000 次点击我有 +200% 受欢迎程度

    在那种情况下,你肯定会增加 100% 吗?

    changeInHits = hitsThisMonth - hitsLastMonth changeAsPercentageOfLastMonth = 100 x changeInHits / hitsLastMonth

    你想要的

    [ (2000 / 1000) * 100 ] = 200

    您也许可以编写类似这样的查询(未经测试,因此可能是错误的):

    SELECT YEARWEEK(date) as weekno, sum(hits) as thisweek, 
       ( SELECT SUM(hits) FROM table WHERE YEARWEEK(date) = weekno - 1 ) as lastweek,
       IF (lastweek > 0, thisweek / lastweek * 100, 0) as increase
    FROM table
    GROUP BY weekno
    

    虽然那是每周一次

    【讨论】:

    • 问题不是如何在变量之间进行减法,而是如何从数据库中获取信息以及更好的方法......
    • 啊好吧...我没有得到“so yoy want [ (2000 / 1000) * 100 ] = 200”部分...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多