sql >> Database teknologi >  >> RDS >> Mysql

Hvordan opretter man Kommende fødselsdagsmodul i Rails?

Flere svar har foreslået at beregne/gemme årets dag og sortere på det, men dette alene vil ikke gøre meget godt, når du er tæt på slutningen af ​​året og skal overveje folk med fødselsdag i begyndelsen af ​​det næste år.

Jeg ville gå efter en løsning, hvor du beregner den fulde dato (år, måned, dag) for hver persons næste fødselsdag , så sorter på det. Du kan gøre dette i Ruby-kode eller ved at bruge en lagret procedure i databasen. Sidstnævnte vil være hurtigere, men vil gøre din app sværere at migrere til en anden db-platform senere.

Det ville være rimeligt kun at opdatere denne liste over kommende fødselsdage én gang om dagen, hvilket betyder, at du kan bruge en form for caching. Derfor er hastigheden af ​​den nødvendige forespørgsel/kode mindre et problem, og noget som dette burde fungere fint, så længe du cachelagrer resultatet:

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)

Rediger :Fastsat til at fungere korrekt med skudår.



  1. 3 måder at "løsne" en streng i MySQL

  2. PHP/MySQL dato/tidsforskel

  3. Sådan beregnes procentdel af kolonne i MySQL

  4. Samle mellem tabeller i to forskellige databaser?