2017-02-28 3 views
0

Versuchen Sie, ein System zu erstellen, um den Benutzer zu überprüfen, wie die letzten 14, 60 oder 120 Tage nicht eingeloggt sind. Ich möchte eine E-Mail senden, wenn der Benutzer 14 Tage lang nicht angemeldet ist, aber nicht gleichzeitig 60 und 120 Tage lang eine E-Mail an diesen Benutzer sendet.Mysql: Überprüfen Sie, ob Benutzer nicht zuletzt 14, 60 oder 120 Tage angemeldet waren

Tabelle: user_counts die user_count zu Tag haben über 80 000 Zeile darin.

Spalte: Es ist in Mysql Datetime

// 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 
    '); 

} 

Ergebnis ich das gleiche user_id in allen 14,60 und 120 Tagen.

+0

ist Zeitfeld Zeitstempel? – Naincy

+0

Was gibt diese Abfrage jetzt zurück? – Akintunde007

+0

Aktualisiert nach Ihrem Feedback – user2673664

Antwort

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

Ist nicht schneller, um diese Anfrage direkt in Mysql dann so zu machen? – user2673664

+0

@ user2673664 Müssen Sie diese Ergebnisse nicht an PHP weitergeben? Wenn Sie über das Datum sprechen, dann ist es wahrscheinlich besser. – apokryfos

+0

Ja, ich werde eine E-Mail an diesen Benutzer senden, um "lange Zeit" zu sagen. – user2673664

Verwandte Themen