Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете модул за предстоящи рождени дни в Rails?

Няколко отговора предлагат изчисляване/съхранение на ден от годината и сортиране по това, но това само по себе си няма да ви помогне, когато сте близо до края на годината и трябва да вземете предвид хора с рождени дни в началото на следващата година.

Бих избрал решение, при което изчислявате пълната дата (година, месец, ден) на следващия рожден ден на всеки човек , след това сортирайте по това. Можете да направите това в Ruby код или с помощта на съхранена процедура в базата данни. Последният ще бъде по-бърз, но ще направи приложението ви по-трудно за мигриране към друга db платформа по-късно.

Би било разумно този списък с предстоящи рождени дни да се актуализира само веднъж на ден, което означава, че можете да използвате някаква форма на кеширане. Така скоростта на необходимата заявка/код е по-малко проблем и нещо подобно трябва да работи добре, стига да кеширате резултата:

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)

Редактиране :Поправено да работи правилно с високосни години.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL код за грешка 1235

  2. Колона „id“ в където клаузата е двусмислена

  3. MySQL низ замяна

  4. PHP MySql неизвестен хост на сървъра

  5. Как да направя рекурсивната SELECT заявка в MySQL?