2010-11-21 5 views
6

J'ai une colonne datetime appelée 'last_login'.MySQL Où la date est supérieure à un mois?

Je veux interroger ma base de données pour sélectionner tous les enregistrements qui ne se sont pas connectés au cours du dernier mois. Comment puis-je faire cela?

C'est ce que j'ai actuellement:

$query = $this->query("SELECT u.id, u.name, u.email, u.registered, g.name as group_name FROM `:@users` AS u LEFT JOIN `:@groups` AS g on u.group_id = g.id WHERE u.last_login = ...... LIMIT {$limit_start}, {$limit_end}"); 

: @ = préfixe base de données

Répondre

18

Essayez d'utiliser date_sub

where u.last_login < date_sub(now(), interval 1 month) 

(similaire à la première réponse, mais dans mon esprit, il est plus « naturel » d'utiliser des nombres entiers positifs)

+0

cela devrait être ">" être correct – Lamis

+1

Comment? @JasonS veut trouver tous les utilisateurs qui ne se sont pas connectés au système au cours du dernier mois. Cela signifie que leur dernière date de connexion sera antérieure au mois précédent. Par conséquent, nous voulons limiter les enregistrements à ceux qui ont un last_login avant (c'est-à-dire moins que) la date il y a un mois à partir de maintenant(). L'utilisation de> vous donnerait uniquement les utilisateurs qui se sont connectés la dernière fois au cours du dernier mois. –

10

Vous pouvez utiliser date_add combiné avec now:

...where u.last_login < date_add(now(), interval -1 month) 

naturellement, car les deux sont spécifiques à MySQL cela vous limite aux backends MySQL. Alternativement, vous pouvez comprendre ce que la date était il ya un mois avec PHP (je ne suis pas une personne PHP, mais je suppose que DateTime::sub aiderait avec cela) et ensuite inclure cette date dans votre requête de la manière normale vous le feriez autre champ date/heure.

-1

matthewh était presque correct, à l'exception du > aurait dû être un bon.

where u.last_login > date_sub(now(), interval 1 month)

+0

Vous avez raison, il devrait être> – Lamis

+0

Je ne suis pas d'accord, en utilisant> vous donnera les utilisateurs dont la dernière connexion a été supérieure à la date il y a un mois aujourd'hui - c'est-à-dire qu'ils se sont connectés au cours du dernier mois. –

Questions connexes