web-dev-qa-db-fra.com

Obtention des utilisateurs enregistrés 360 jours à compter de la date actuelle

Conformément au titre, ce que je veux faire est d'exécuter une requête personnalisée (à l'aide de WP-Cron) exécutée une fois par jour pour rechercher les utilisateurs enregistrés exactement 360 jours avant la date actuelle (pas besoin de temps, mais de date) et rassembler leur ID. J'ai ceci:

global $wpdb;
$sql = $wpdb->prepare(
    "SELECT * FROM {$wpdb->users} 
     WHERE {$wpdb->users}.user_registered = CURRENT-DATE-MINUS-360-DAYS";
);
$userdata = HOW-DO-I-GET-THE-RESULTS-IN-AN-ARRAY

Où le peu en majuscules représente le peu je ne sais pas quoi faire :) Toute aide très appréciée.

1
Kev

J'ai jeté un coup d'œil dans la classe WP_User_Query et prend en charge une requête WP_Date_Query à la date d'enregistrement de l'utilisateur.

Nous pourrions donc utiliser:

$query = new WP_User_Query( $args );

ou simplement:

$users = get_users( $args );

où:

$args = [
    'fields'     => 'ID',
    'number'     => 8,
    'date_query' => [
        [ 'before' => '359 days ago midnight' ],
        [ 'after'  => '360 days ago midnight', 'inclusive' => true ],
   ] 
];

Cela génère la requête SQL suivante ( vue développée ):

SELECT wp_users.ID 
    FROM wp_users 
    WHERE 1=1 
        AND ( 
                wp_users.user_registered >= '2014-08-10 00:00:00' 
            AND       
                wp_users.user_registered < '2014-08-11 00:00:00' 
        ) 
    ORDER BY user_login ASC 
    LIMIT 10;

où aujourd'hui est 2015-08-05.

Il semble que nous devrions mettre à jour le Codex sur get_users() , en ce qui concerne l’argument date_query.

2
birgire

Utilisation

$wpdb->get_results("SELECT *, (DATEDIFF(NOW(),user_registered)) AS daydiff FROM {$wpdb->users} WHERE 'daydiff' = 360");
0
Trang