Tôi đang cố sắp xếp một tập hợp kết quả cung cấp cho 5 người dùng gần nhất được sắp xếp theo ngày sinh sắp tới. Điều này hoạt động hoàn hảo cho đến khi năm nhuận nhảy vào chơi. Ví dụ:lời nhắc sinh nhật mysql, năm nhuận
- 15 tháng năm - 96 ngày còn lại
- 15 tháng năm - 97 ngày còn lại
Kết quả đầu là một sinh tại năm 1987 và thấp hơn là từ năm 1988. u_birth được lưu giữ như yyyy-mm-dd Có cách nào đơn giản để sắp xếp vấn đề này mà không phải viết lại toàn bộ truy vấn?
SELECT u_birth, IF(DAYOFYEAR(u_birth) >= DAYOFYEAR(NOW()),
DAYOFYEAR(u_birth) - DAYOFYEAR(NOW()),
DAYOFYEAR(u_birth) - DAYOFYEAR(NOW()) +
DAYOFYEAR(CONCAT(YEAR(NOW()), '-12-31'))
)
AS distance
FROM (blog_users)
WHERE `s_agehide` = 0
ORDER BY distance ASC
LIMIT 5
truy vấn này được thực hiện và sửa đổi từ hướng dẫn mysql: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489
Cảm ơn! Tôi sẽ có một cái nhìn, gimme một vài phút để thử nó ra =) – moodh
@tired: Lưu ý rằng tôi đã thực hiện một thay đổi nhỏ để tất cả những người có ngày sinh nhật ngày nay có khoảng cách 0, không phải khoảng cách 365. Tôi đã thay đổi 'NOW()' thành 'DATE (NOW())'. –
Nó hoạt động như nó được cho là, tuy nhiên tôi có một câu hỏi tiếp theo: Làm cách nào để truy xuất các hàng bổ sung từ bảng? Tôi đã cố gắng trong cả ba lựa chọn nhưng không may mắn, cho phép nói rằng tôi muốn lấy s_agehide quá. Cảm ơn tất cả sự giúp đỡ! – moodh