2017-02-28 5 views
0

最後に14,60、または120日間ログインしていないユーザーをチェックするシステムを構築しようとしています。ユーザーが14日間ログインしていないが、同時にこのユーザーに60日と120日間電子メールを送信していない場合は、電子メールを送信したい。Mysql:最後に14,60、または120日間ログインしていないことを確認してください

:user_countは、その日のuser_countが80,000行を超えています。

コラム:時間は、私はすべての14,60および120日で同じUSER_IDを取得

// Number of days a user have not been login 
$dateCheck = array('14', '60', '120'); 

foreach ($dateCheck as $day) {   

    $userList = $wpdb->get_results(' 
    SELECT id, user_id 
    FROM user_counts 

    WHERE DATE(time) = "'.date("Y-m-d", strtotime("-".$day." day")).'" 
     AND time != (
      SELECT MAX(time) FROM user_counts 
      WHERE time < DATE_SUB(NOW(), INTERVAL '.$day.' DAY) 
    ) 
    GROUP BY user_id 
    '); 

} 

Mysqlの

に結果 のDateTimeです。

+0

はタイムフィールドタイムスタンプですか? – Naincy

+0

このクエリは今何を返しますか? – Akintunde007

+0

あなたのフィードバックの後に更新されます – user2673664

答えて

0
// Number of days a user have not been login 
$dateCheck = array('14', '60', '160'); 

$res = $wpdb->get_results(' 
    SELECT id, user_id, MAX(DATE(time)) as t 
    FROM user_counts  
    GROUP BY user_id 
    HAVING t <= "'.date("Y-m-d", strtotime("-".min($dateCheck)." day")).'" 
    ORDER BY t 
'); 

rsort($dateCheck); 
foreach ($res as $result) { 
    $date = date_create($res); 

    foreach ($dateCheck as $day) { 

     if ($result->t == date("Y-m-d", strtotime("-".$day." day"))) { 

      // Send for exempel a mail 
      // check witch email temple to use by using: $day 

     } 
    } 
} 
+0

このリクエストをMysqlで直接行うのは早くないのですか? – user2673664

+0

@ user2673664これらの結果をPHPに渡す必要はありませんか?あなたが日付を話しているなら、それはおそらくもっと良いでしょう。 – apokryfos

+0

はい、私はこのユーザーに「長い時間」と言う電子メールを送信します。 – user2673664

関連する問題