-1

こんにちは、20 日間登録したメンバーがいるとしましょう。したがって、20 日後にメンバーがログインしなかった場合、ステータスが変更されます。ただし、MySQL データベースに として書き込まれているステータス変更日にのみ基づいていますyear-month-day。したがって、ステータス変更日までに 20 日が経過すると、ステータスが変更されます。

これを行う方法を教えていただければ幸いです。

デビッド

アップデート:

コード:

$newStatus = "Non-Active - Driver Chose Non-Compliance";

    $sql = "SELECT username,ATF FROM members WHERE username = 'test'";
    $getcsvuser = $DBH->prepare($sql);
    $getcsvuser->execute();
    while($row = $getcsvuser->fetch(PDO::FETCH_ASSOC)){

        $memusername = $row['username'];
        $memATF = $row['ATF'];
        if ($memATF != 0 || $memATF != "0")
        {
        $tsql = "SELECT username,status,memberview ,statuschangedate FROM csvdata WHERE memberview =:user";
        $tgetcsvuser = $DBH->prepare($tsql);
        $tgetcsvuser->execute(array(':user' => $memusername));
        while($trow = $tgetcsvuser->fetch(PDO::FETCH_ASSOC)){

            $csvstatus = $trow['status'];
            $csvusername = $trow['username'];
            $csvdate = $trow['statuschangedate'];

            if($csvstatus == "Open" || $csvstatus == "Enrolled - Policyholder Follow-Up Required" || $csvstatus == "Enrolled - Employee Follow-Up Required" || $csvstatus == "Non-Active - Insurance Cancelled" || $csvstatus == "Non-Active, Unable to Monitor - Incidental Business use Exclusion" || $csvstatus == "Non-Active - Employee Not Covered Under Listed Policy" || $csvstatus == "Non-Active - PolicyHolder Cancelled Additional Interest")
            {

                $newsql = "UPDATE csvdata SET status = :newstatus WHERE statuschangedate < NOW() - INTERVAL :atf DAY AND username =:mem";
                $newgetcsvuser = $DBH->prepare($newsql);
                $newgetcsvuser->execute(array(':newstatus' => $newStatus, ':atf' => $memATF, ':mem' => $csvusername));
                while($rrow = $newgetcsvuser->fetch(PDO::FETCH_ASSOC)){
                    echo "working";
                }
            }

        }
        }

    }
4

3 に答える 3

2

次の 2 つの組み合わせが考えられます。

mysql を使用して、変更するユーザーを更新します。

update
  members
set
  status = 'foo'
where
  status_change_date < NOW() - INTERVAL 20 DAY

2 番目の部分は、そのクエリを毎日実行する cron ジョブです。

于 2013-02-14T22:36:35.190 に答える
1

私はこれをテストしませんでしたが、近いはずです。

//$dbVal = $row["databaseColumn"];
$dbVal = "2013-01-24";  //For example
$now = Date();

$diff = abs($now - strtotime($dbVal));

$daysSince = floor(($diff/(60*60*24));
if ($daysSince >20){
    //Set status in DB;
}

@popnoodles ソリューションを組み込む:

//$dbVal = $row["databaseColumn"];
$dbVal = "2013-01-24";  //For example
$expireTime = 20;

$diff = strtotime($dbVal) - strtotime("today - $expireTime days");
if ($diff < 0 ){
    //Set status in DB;
}
于 2013-02-14T22:37:30.747 に答える
1

どのようにそのことについて:

UPDATE tablename
SET inactive = 1
WHERE date_field < DATE_SUB(NOW(), INTERVAL 20 DAY)

このクエリをcronjob1 晩に 1 回実行できます。

したがって、この SQL クエリを実行する以外は、PHP ロジックを使用せずにこれを行うことができます。

于 2013-02-14T22:36:45.777 に答える