sql >> Database >  >> RDS >> Mysql

Hoe maak je de module Aankomende verjaardagen in Rails?

Verschillende antwoorden hebben voorgesteld om dag van het jaar te berekenen/op te slaan en daarop sorteren, maar dit alleen heeft niet veel zin als je het einde van het jaar nadert en rekening moet houden met mensen die begin volgend jaar jarig zijn.

Ik zou gaan voor een oplossing waarbij je de volledige datum (jaar, maand, dag) van de volgende verjaardag van elke persoon berekent , sorteer daar dan op. U kunt dit doen in Ruby-code of met behulp van een opgeslagen procedure in de database. Dit laatste is sneller, maar maakt het later moeilijker om uw app naar een ander db-platform te migreren.

Het zou redelijk zijn om deze lijst met aankomende verjaardagen slechts één keer per dag bij te werken, wat betekent dat je een vorm van caching kunt gebruiken. Dus de snelheid van de benodigde query/code is minder een probleem, en zoiets als dit zou prima moeten werken zolang je het resultaat in de cache plaatst:

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)

Bewerken :Vast om correct te werken met schrikkeljaren.



  1. Hoe DbContext configureren om te werken met Oracle ODP.Net en EF CodeFirst?

  2. Aangrenzend lijstmodel versus genest setmodel voor hiërarchische MySQL-gegevens?

  3. MySQL dynamische link om de juiste rij op te halen

  4. De rol van de DBA in NoSQL