sql >> データベース >  >> RDS >> Mysql

Railsで今後の誕生日モジュールを作成するにはどうすればよいですか?

    いくつかの回答は、年の日の計算/保存を示唆しています。 それを並べ替えますが、年末が近づいていて、来年の初めに誕生日を迎える人を考慮する必要がある場合、これだけではあまり効果がありません。

    各人の次の誕生日の完全な日付(年、月、日)を計算するソリューションを探します。 、それから並べ替えます。これは、Rubyコードで行うか、データベースのストアドプロシージャを使用して行うことができます。後者の方が高速ですが、後でアプリを別のデータベースプラットフォームに移行するのが難しくなります。

    今後の誕生日のこのリストを1日1回だけ更新することは合理的です。つまり、何らかの形式のキャッシュを使用できます。したがって、必要なクエリ/コードの速度はそれほど問題ではなく、結果をキャッシュする限り、このようなものは正常に機能するはずです:

    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. Ubuntu20.04にZabbixをインストールして設定する方法

    2. org.hibernate.internal.util.config.ConfigurationException:cfg.xmlリソースが見つかりませんでした[/HibernateTest/src/hibernate.cfg.xml]

    3. mysqlユーザーが存在するかどうかを確認する

    4. MacにSQLServer2019をインストールする