sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit modul Nadcházející narozeniny v Rails?

Několik odpovědí navrhlo vypočítat/uložit den v roce a třídění podle toho, ale toto samo o sobě moc nepomůže, když se blíží konec roku a potřebujete vzít v úvahu lidi s narozeninami na začátku příštího roku.

Vybral bych řešení, kde vypočítáte celé datum (rok, měsíc, den) příštích narozenin každé osoby , pak podle toho seřaď. Můžete to udělat v kódu Ruby nebo pomocí uložené procedury v databázi. Druhá možnost bude rychlejší, ale později bude obtížnější migrovat vaši aplikaci na jinou platformu db.

Bylo by rozumné aktualizovat tento seznam nadcházejících narozenin pouze jednou denně, což znamená, že můžete použít nějakou formu ukládání do mezipaměti. Rychlost potřebného dotazu/kódu je tedy menší problém a něco takového by mělo fungovat dobře, pokud výsledek uložíte do mezipaměti:

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)

Upravit :Opraveno, aby správně fungovalo s přestupnými roky.



  1. MySQL:Hledání řádků, které se neúčastní vztahu

  2. MySQL SELECT LAST_INSERT_ID() pro složený klíč. Je to možné?

  3. Vytvořte uživatele MySQL v systému Linux pomocí příkazového řádku

  4. Zahrnout názvy sloupců do výsledků dotazu SQLite