2010-11-21 32 views
6

Tôi có một cột ngày giờ gọi là 'last_login'.MySQL Trường hợp ngày tháng lớn hơn một tháng?

Tôi muốn truy vấn cơ sở dữ liệu của mình để chọn tất cả các bản ghi chưa đăng nhập trong tháng trước. Làm thế nào để tôi làm điều này?

Đây là những gì tôi hiện có:

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

: @ = cơ sở dữ liệu tiền tố

Trả lời

18

Hãy thử sử dụng date_sub

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

(Tương tự như câu trả lời đầu tiên nhưng trong tâm trí của tôi nó là nhiều "tự nhiên" để sử dụng nguyên dương)

+0

điều này phải là ">" chính xác – Lamis

+1

Làm thế nào? @JasonS muốn tìm tất cả người dùng chưa đăng nhập vào hệ thống trong tháng trước. Điều đó có nghĩa là ngày đăng nhập cuối cùng của họ sẽ là trước một tháng trước. Do đó, chúng tôi muốn hạn chế các bản ghi cho những người có last_login trước đây (tức là ít hơn) ngày một tháng trước kể từ bây giờ(). Sử dụng> sẽ chỉ cung cấp cho bạn những người dùng đăng nhập lần cuối trong tháng trước. –

10

Bạn có thể sử dụng date_add kết hợp với now:

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

Đương nhiên, như cả hai đều là MySQL cụ thể điều này giới hạn bạn với các chương trình phụ trợ của MySQL. Ngoài ra, bạn có thể tìm ra ngày tháng là gì với PHP (tôi không phải là người PHP, nhưng tôi đoán là DateTime::sub sẽ giúp bạn) và sau đó bao gồm ngày đó trong truy vấn của bạn theo cách thông thường bạn sẽ trường ngày/giờ khác.

-1

matthewh là gần như chính xác, ngoại trừ > cần phải có được một cái đúng.

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

+0

Bạn nói đúng, nó phải> – Lamis

+0

Tôi không đồng ý, sử dụng> sẽ cung cấp cho bạn người dùng đăng nhập lần cuối lớn hơn ngày một tháng trước ngày hôm nay - tức là họ đã đăng nhập trong tháng trước. –

Các vấn đề liên quan