计算一周的mysql值,然后从星期一开始计数?

时间:2013-04-08 20:10:19

标签: php mysql

我有一个计数查询,用于计算用户查看其他用户个人资料的次数。 它目前只计算表中的所有行,但是我想知道在php中是否有一种方法可以使用一个计算,即从星期一到星期日计算表'ptb_profile_views'中的所有行,然后从下面再次从0开始星期一,并计算该周的所有值,并且不包括前一周的任何计数,我不确定这是否可能被认为是因为它需要一些时间的记忆方面,

另一个选项我想知道是否有一个mysql语句,我可以添加来说每个星期日00:00 AM从ptb_profile_views删除所有,然后我们从星期一开始新鲜。

有人可以帮我解决任何问题,谢谢

我的表格如下:

id   |   profile_id   |   viewed_id

1           4                 8
2           5                 6

MySQL的

function check_profile_views() {
            global $connection;
            global $_SESSION;
            $query = "SELECT COUNT(DISTINCT profile_id) totalCOUNT FROM ptb_profile_views WHERE viewed_profile_id=".$_SESSION['user_id']." AND profile_id!='-1'";
            $check_profile_views_set = mysql_query($query, $connection);
            confirm_query($check_profile_views_set);
            return $check_profile_views_set;        
        }

PHP

 <?
    $check_profile_views_set = check_profile_views();
    while ($views = mysql_fetch_array($check_profile_views_set)) {

    echo"".$views['totalCOUNT'].""; } ?> 

2 个答案:

答案 0 :(得分:0)

您可以按星期,星期,例如

进行过滤
SELECT count(*), YEAR(datefield), WEEK_OF_YEAR(datefield)
FROM yourtable
GROUP BY YEAR(datefield), WEEK_OF_YEAR(datefield)

删除逻辑类似。删除今年比“本周”早一周的所有记录,然后删除前几年的所有记录:

DELETE FROM yourtable
WHERE (YEAR(datefield) < YEAR(now()))
   OR (YEAR(datefield) = YEAR(now()) AND (WEEK_OF_YEAR(datefield) < WEEK_OF_YEAR(now()))

答案 1 :(得分:0)

因为你提到你没有为每次有人访问个人资料而只记录日期时间的历史记录,但只计算,唯一的解决办法是在每个星期一00:00重置你的计数器。

您可以使用cron作业执行此操作。您应该可以从主机管理面板创建一个。

或者你可以在每个星期一自己手动运行cron-page来重置计数器。

如果您想让事情变得更复杂,您可以让cron-page创建/更新日志文件,以保持总访问次数。

然而,最好的解决方案是重新考虑您的数据库设计并创建一个表,以便使用正确的日期时间记录每次访问。