2010-09-09 39 views
23

Tôi lưu bản ghi các thông tin đăng nhập trong một bảng. Tôi có các cột cho id, ip, ngày tháng và thời gian. Từ hồ sơ đăng nhập đó, tôi muốn tìm nạp thông tin đăng nhập chỉ trong một giờ trước.MySQL: Tìm nạp các hàng được thêm vào giờ trước

Tôi đang chuyển qua tài liệu MySQL về các chức năng ngày và giờ, nhưng tôi dường như không thể kết hợp chúng một cách chính xác.

Ai đó có thể giúp tôi không?

+1

Is rằng bốn hoặc ba cột và loại dữ liệu của "ngày giờ" là gì? –

+0

Thay đổi nó ngay bây giờ, chỉ có một cột cho ngày và giờ - và ngày giờ của nó. –

Trả lời

79

tận dụng các DATE_SUB() và Now() chức năng:

select count(*) as cnt 
from log 
where date >= DATE_SUB(NOW(),INTERVAL 1 HOUR); 

Hy vọng nó sẽ giúp bạn:)

+0

Có, tôi đã làm một cái gì đó như thế, chỉ với TIMESUB (hoặc SUBTIME?). Nhưng điều này có đòi hỏi trường ngày tháng là kiểu datetime không? –

+0

Có sử dụng TIMESUB thích hợp hơn. có, biểu thức đầu tiên phải là biểu thức ngày giờ. thứ hai phải là biểu thức thời gian. kiểm tra điều này http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_subtime – SDReyes

+1

Lưu dữ liệu vào UTC, cần sử dụng UTC_TIMESTAMP() thay vì NGAY BÂY GIỜ (). –

0

mà không có chi tiết cụ thể, tôi nghĩ Date_Add() sẽ làm việc .. bằng cách thêm vào bạn mệnh đề where một add giờ VỚI DOANH NGHIỆP âm

(hoặc Date_Sub())

2

tôi khuyên bạn nên có một cột datetime thay vì cột ngày và giờ.

Giả sử bạn có một cột datetime gọi LAST_LOGIN:

SELECT id, ip_address, last_login 
FROM mytable 
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour); 
+0

Nếu ngày của một ngày cụ thể cần được in thì sao? Tôi không muốn lấy ngày tháng trước, thay vào đó chỉ là ngày hiện tại. Bạn có thể giúp tôi về điều này ? – Sap

0

nó có thể được thực hiện dễ dàng bằng

select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR 
0

Bạn cũng có thể sử dụng CURDATE() chức năng

SELECT 
    count(*) AS TotalCount 
FROM 
    tblName 
WHERE 
    datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR) 
Các vấn đề liên quan