2010-12-27 49 views
18

Đối với truy vấn bên dưới, làm cách nào tôi có thể đếm số hàng nơi datesent chưa đầy 24 giờ? (Trường datesent là dấu thời gian).Đếm các hàng có dấu thời gian nhỏ hơn 24 giờ

Cảm ơn trước,

John

$message = "SELECT datesent, recipient 
       FROM privatemessage 
       WHERE recipient = '$u'"; 


    $messager = mysql_query($message); 

$messagearray = array(); 
+0

tôi đã xóa thẻ 'css' vì nó không liên quan gì đến câu hỏi. –

Trả lời

5

Bạn có thể sử dụng chức năng DATE_SUB. Trừ một ngày từ ngày hiện tại trong mệnh đề where.

Something như

DATE_SUB(NOW(), INTERVAL 1 DAY) 

EDIT: CURTIME thay đổi() để VỚI DOANH NGHIỆP()

+0

'CURTIME' chỉ trả về thời gian chứ không trả về ngày giờ. –

+0

CURTIME chỉ trả về thời gian hiện tại, không có gì để thực hiện với ngày hiện tại. Thay vào đó, bạn muốn chuyển NGAY(). – TehShrike

3
$message="select count(1) 
from privatemessage 
where datesent>=date_sub(now(), 24 hours) 
and recipient='$u'" 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

Điều này sẽ trả về một số của mỗi hàng, bởi vì nó so sánh rằng giá trị hiện tại lớn hơn hoặc bằng cùng giá trị, sau khi trừ đi 24 giờ từ nó ... Thực hiện một hàm trên cột trong bảng cũng có nghĩa là chỉ mục, nếu một tồn tại, không thể được sử dụng cho các hoạt động. –

+0

Đúng vậy. Xin lỗi, tôi không sử dụng MySQL, vì vậy tôi không có cơ hội để kiểm tra giải pháp trước khi đăng nó. –

+1

Đơn vị là HOUR (số ít), không HOURS. Xem liên kết mà bạn đã cung cấp: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add –

48

Sử dụng:

SELECT COUNT(*) AS cnt 
    FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
+0

Đây là câu trả lời duy nhất vượt qua giá trị chính xác vào thông số đầu tiên của DATE_SUB – TehShrike

+0

Cảm ơn ... điều này có vẻ đầy hứa hẹn. Nhưng tôi đang gặp rắc rối thực sự lặp lại kết quả để xem nó có hoạt động không. Làm thế nào tôi có thể lặp lại tổng số? – John

+0

@John: Tôi đã cập nhật để xác định bí danh cột - "cnt" là những gì bạn muốn tham chiếu trong PHP để lấy giá trị cho cột. –

0

Tôi thấy đây là một cũ một mặc dù cho bất cứ ai mà ở đây máng tìm kiếm trực tuyến sau này, tôi muốn làm rõ rằng câu hỏi là về một dấu thời gian, không phải datetime. Tôi cần đếm dựa trên dấu thời gian. Sửa lỗi dễ dàng là chuyển đổi datetime thành unix_timestamp. Thử nghiệm trên MySQL 5.7

SELECT COUNT(*) AS cnt 
FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
Các vấn đề liên quan