Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để tạo mô-đun Sinh nhật sắp tới trong Rails?

Một số câu trả lời đã gợi ý tính toán / lưu trữ ngày trong năm và phân loại dựa trên điều đó, nhưng chỉ điều này sẽ không hiệu quả nhiều khi bạn đã gần đến cuối năm và cần phải xem xét những người có sinh nhật vào đầu năm sau.

Tôi muốn đưa ra một giải pháp trong đó bạn tính toán đầy đủ ngày (năm, tháng, ngày) của sinh nhật tiếp theo của mỗi người , sau đó sắp xếp trên đó. Bạn có thể thực hiện việc này bằng mã Ruby hoặc sử dụng một thủ tục được lưu trữ trong cơ sở dữ liệu. Sau này sẽ nhanh hơn, nhưng sẽ khiến ứng dụng của bạn khó di chuyển sang nền tảng db khác sau này.

Sẽ là hợp lý nếu chỉ cập nhật danh sách các sinh nhật sắp tới này một lần mỗi ngày, có nghĩa là bạn có thể sử dụng một số hình thức lưu vào bộ nhớ đệm. Do đó, tốc độ của truy vấn / mã cần thiết sẽ ít gặp vấn đề hơn và những thứ như thế này sẽ hoạt động tốt miễn là bạn lưu kết quả vào bộ nhớ cache:

class User
  def next_birthday
    year = Date.today.year
    mmdd = date_of_birth.strftime('%m%d')
    year += 1 if mmdd < Date.today.strftime('%m%d')
    mmdd = '0301' if mmdd == '0229' && !Date.parse("#{year}0101").leap?
    return Date.parse("#{year}#{mmdd}")
  end
end

users = User.find(:all, :select => 'id, date_of_birth').sort_by(&:next_birthday).first(5)

Chỉnh sửa :Đã sửa để hoạt động chính xác với các năm nhuận.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lỗi khóa ngoại mysql # 1452

  2. Đọc mảng JSON trong MYSQL

  3. Làm thế nào để chuyển đổi định dạng ngày csv sang thành mysql db

  4. TẠO BẢNG NHƯ A1 thành A2

  5. MySQL SELECT LAST_INSERT_ID () cho khóa ghép. Nó có khả thi không?