2010-07-14 12 views
9

Giả sử tôi muốn nhận được mười bản ghi với số lượt thích MOST trong 24 giờ qua. Dưới đây là những gì tôi có cho đến nay:Truy vấn MySQL PHP phổ biến nhất trong 24 giờ qua

$date = date("o-m-d"); 
$query = "SELECT date_created,COUNT(to),from,to FROM likes WHERE date_created LIKE '$date%' GROUP BY to ORDER BY COUNT(to) DESC LIMIT 10"; 

Vấn đề với đó là nó chỉ nhận được thích nhất từ ​​ngày hôm đó, bất kể có bao xa vào ngày hôm đó nó được. Nó không được yêu thích nhất trong 24 giờ qua.

cấu trúc cho lượt thích: từ | đến | date_created | id

ngày theo giờ ISO chuẩn - ví dụ 2010-07-14T00: 35: 31-04: 00. Đi thẳng từ tham chiếu PHP: date ("c");

+0

datatype của tôi là varchar, những gì tôi làm bây giờ ... – Bharanikumar

Trả lời

21
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
+1

1 - Chết tiệt, bạn có thể gõ nhanh hơn tôi :( –

+0

Cảm ơn bạn đã khen –

+0

@ Dave Rix Chào mừng bạn đến stackoverflow :) –

1

Bạn nên sử dụng chức năng ngày/giờ, thay vì LIKE.

WHERE date_created >= (NOW() - INTERVAL 24 HOUR) 
+0

CẦN ĐƯỢC KHÔNG < –

+0

@haim evgi Có, tôi nhận thấy rằng lỗi sau khi tôi đã gửi câu trả lời. :) –

+0

câu trả lời tốt nhưng có một vấn đề: chúng ta nên xử lý thời gian trong php không mysql –

1

Vì vậy, ngày đầu tiên phải được xác định là dấu thời gian có trên default current timestamp. Nếu bạn có một DATE_MODIFIED trong bảng cũng sau đó DATE_MODIFIED sẽ phải on update current timestamp và bạn có thể định nghĩa với ngày tạo ra như là một dấu thời gian và kích hoạt này để cập nhật nó

CREATE TRIGGER likes_date_entered 
BEFORE INSERT ON likes 
FOR EACH ROW SET NEW.date_created = NOW() 

Bây giờ chúng ta có một dấu thời gian bạn có thể dễ dàng áp dụng một số chức năng ngày mysql cho cột.

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Tôi sẽ để lại những việc cần làm như một bài tập cho người đọc, trừ khi bạn nói khá xin vui lòng và muốn tôi cung cấp cho các cú pháp chính xác.

+0

Điều kiện của George hoặc Hami sẽ hoạt động khi bạn thay đổi loại dữ liệu. – umassthrower

+0

bạn biết đấy, câu trả lời của tôi tốt hơn :-P Tính toán dấu thời gian trong PHP là một ý tưởng tồi: "ngày ở ISO tiêu chuẩn - ví dụ 2010-07-14T00: 35: 31-04: 00. Hãy đến ngay từ tham chiếu PHP: ngày ("c"); " – umassthrower

2

Nếu trường date_created của bạn là loại trường ngày giờ hoặc dấu thời gian, bạn có thể sử dụng DATE_SUB trong mệnh đề where như sau;

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR)