0

ユーザーが別のユーザー プロファイルを表示した回数をカウントするカウント クエリがあります。現在、テーブル内のすべての行をカウントするだけですが、テーブル 'ptb_profile_views' 内のすべての行を月曜日から日曜日までカウントし、次に 0 から開始するという計算を PHP で使用する方法があるかどうか疑問に思っていました。月曜日、その週のすべての値を数え、前の週からのカウントは含まれません。その背後にメモリの側面の時間が必要になるため、これが可能であるとは思えません。

私が疑問に思っていたもう 1 つのオプションは、毎週日曜日の午前 0 時に追加できる mysql ステートメントがあるかどうかです。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 ページを自分で手動で実行して、カウンターをリセットすることもできます。

より複雑にしたい場合は、cron ページでログ ファイルを作成/更新して、合計アクセス数を記録することができます。

ただし、最善の解決策は、データベースの設計を再考し、各訪問を適切な日時で適切に記録するテーブルを作成することです。

于 2013-04-08T20:15:27.190 に答える