2014-12-29 17 views
8

Tôi có bảng user, chứa id_user, usernameuser_time. Và user_time là khi người dùng đã đăng ký, các thuộc tính là timestamp nên đầu ra là như thế này:Hiển thị dữ liệu trong ngày, tuần, tháng và năm hiện tại

User A | user_time > 2014-12-22 10:10:10 

Sau đó, tôi sử dụng truy vấn này để hiển thị dữ liệu mỗi năm

SELECT * FROM user WHERE user_time = YEAR(NOW()); 

Các công trình truy vấn nhưng chỉ lợi nhuận một hàng trống. Nó không chỉ là năm, mà còn cả ngày, tuần và tháng trả lại hàng trống. Tại sao truy vấn này không trả về bất kỳ dữ liệu nào?

Trả lời

10

Vấn đề là bạn không làm bất cứ điều gì với dữ liệu của bạn:

SELECT * FROM user WHERE user_time=YEAR(NOW()) 

Cố gắng để có được những YEAR từ user_time quá, như thế này, do đó bạn so sánh các con số, không timestamp và một số:

SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

Hoặc, như @ItsMe gợi ý:

EXPLAIN SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

Và xin vui lòng, tránh * trong các truy vấn của bạn, đây là một thực hành không tốt.

+0

Cảm ơn người đàn ông .. nó hoạt động –

+0

@Andhika Bạn có thể chấp nhận câu trả lời nếu bạn thấy nó hữu ích :) – VMAtm

+2

NĂM (user_time) = YEAR (NOW()) không được khuyến nghị; vì nó sẽ yêu cầu quét toàn bộ bảng. Thử người dùng FROMPLUS SELECT * FROM WHERE YEAR (user_time) = YEAR (NOW()) ' – ItsMe

6

YEAR trả về một số như 2014. Điều đó sẽ không bao giờ bằng một thời gian. Bạn cần phải kiểm tra xem năm user_time là giống như năm nào:

SELECT * FROM user 
WHERE YEAR(user_time) = YEAR(NOW()) 
Các vấn đề liên quan