0

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

我想知道的另一个选项是是否有一个 mysql 语句,我可以添加每个星期天上午 00:00 从 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'].""; } ?> 
4

2 回答 2

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()))
于 2013-04-08T20:15:15.927 回答
0

既然您提到您不会为每次有人访问个人资料而保留日期时间的历史记录,而只是计数,唯一的解决方案是在每个星期一的 00:00 重置您的计数器。

您可以通过 cron 作业来做到这一点。您应该能够从您的主机管理面板创建一个。

或者,您可以在每个星期一手动运行 cron-page 以重置计数器。

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

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

于 2013-04-08T20:15:27.190 回答