2010-11-21 12 views
6

Mam kolumnę datetime o nazwie "last_login".MySQL Gdzie data jest większa niż jeden miesiąc?

Chcę wysłać zapytanie do mojej bazy danych, aby wybrać wszystkie rekordy, które nie zalogowały się w ciągu ostatniego miesiąca. Jak mam to zrobic?

To co mam obecnie:

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

: @ = baza prefiks

Odpowiedz

18

Spróbuj użyć date_sub

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

(podobny do pierwszej odpowiedzi, ale w moim umyśle, że jest bardziej „naturalne”, by użyć liczby całkowite dodatnie)

+0

to powinno być ">" za prawidłowe – Lamis

+1

W jaki sposób? @JasonS chce znaleźć wszystkich użytkowników, którzy nie zalogowali się do systemu w ciągu ostatniego miesiąca. Oznacza to, że ich ostatnia data logowania będzie miała miejsce przed miesiącem. Dlatego chcemy ograniczyć rekordy do tych, którzy mają last_login przed (tj. Mniej niż) datę jeden miesiąc temu od teraz(). Używanie> da ci tylko tych użytkowników, których ostatnie logowanie było w ciągu ostatniego miesiąca. –

10

Można użyć date_add połączeniu z now:

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

Naturalnie, jak oba są MySQL specyficznych ogranicza to do tworzenia kopii zapasowych MySQL. Alternatywnie, możesz dowiedzieć się, jaka data była miesiąc temu z PHP (nie jestem osobą PHP, ale zgaduję, że to pomoże DateTime::sub), a następnie uwzględnić tę datę w zapytaniu w normalny sposób inne pole daty/czasu.

-1

matthewh niemal prawidłowe, z wyjątkiem > powinien być prawy.

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

+0

Masz rację, powinno to być> – Lamis

+0

Nie zgadzam się, używając opcji> otrzymasz użytkowników, których ostatnie logowanie było większe niż data poprzedniego miesiąca - oznacza to, że zalogowali się w ciągu ostatniego miesiąca. –

Powiązane problemy