2010-11-21 20 views
6

Tengo una columna de fecha y hora llamada 'last_login'.MySQL ¿Dónde la fecha es mayor a un mes?

Deseo consultar mi base de datos para seleccionar todos los registros que no han iniciado sesión en el último mes. ¿Cómo hago esto?

Esto es lo que tengo actualmente:

$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}"); 

: @ = base de datos de prefijo

Respuesta

18

Intente utilizar date_sub

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

(similar a la primera respuesta, pero en mi mente es más "natural" para utilizar números enteros positivos)

+0

esto debería ser ">" para ser correcta – Lamis

+1

¿Cómo así? @JasonS quiere encontrar a todos los usuarios que no han iniciado sesión en el sistema en el último mes. Eso significa que su última fecha de inicio de sesión será anterior a hace un mes. Por lo tanto, queremos restringir los registros a aquellos que tienen un last_login anterior (es decir, menor que) a la fecha de hace un mes a partir de ahora(). El uso de> solo le daría a los usuarios cuyo último inicio de sesión fue durante el último mes. –

10

Usted puede utilizar date_add combinarse con now:

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

Naturalmente, ya que ambos son específicas de MySQL esto te limita a los backends de MySQL. Alternativamente, puede averiguar cuál era la fecha de hace un mes con PHP (no soy una persona de PHP, pero supongo que DateTime::sub lo ayudaría) y luego incluir esa fecha en su consulta de la forma habitual en que lo haría. otro campo de fecha/hora.

-1

matthewh era casi correcto, excepto la > debería haber sido una correcta.

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

+0

Tiene razón, debe ser> – Lamis

+0

No estoy de acuerdo, el uso de> le dará a los usuarios que el último inicio de sesión fue mayor que la fecha de hace un mes hoy, es decir, que han iniciado sesión durante el último mes. –

Cuestiones relacionadas