sql >> Databasteknik >  >> RDS >> Mysql

Effektivt avgöra om ett företag är öppet eller inte baserat på butikens öppettider

Om du är villig att bara titta på en vecka i taget, kan du kanonisera alla öppnings-/stängningstider för att vara inställda antal minuter sedan veckans början, säg söndag 0 timmar. För varje butik skapar du ett antal tuplar av formen [startTime, endTime, storeId]. (För timmar som sträckte sig över söndag midnatt, skulle du behöva skapa två tupler, en går till slutet av veckan, en börjar i början av veckan). Denna uppsättning tupler skulle indexeras (säg, med ett träd som du skulle förbehandla) på både startTime och endTime. Tuplarna bör inte vara så stora:det är bara ~10k minuter på en vecka, vilket kan rymmas i 2 byte. Denna struktur skulle vara graciös inuti en MySQL-tabell med lämpliga index, och skulle vara mycket motståndskraftig mot ständiga infogningar och raderingar av poster när informationen ändras. Din fråga skulle helt enkelt vara "välj butiksId där startTime <=tid och sluttid>=tid", där tiden var de kanoniserade minuterna sedan midnatt på söndag.

Om informationen inte ändras särskilt ofta och du vill att uppslagningarna ska vara mycket snabba, kan du lösa alla möjliga frågor i förväg och cachelagra resultaten. Till exempel finns det bara 672 kvartsperioder på en vecka. Med en lista över företag, som var och en hade en lista över öppnings- och stängningstider som Brandon Rhodes lösning, kan du helt enkelt gå igenom varje 15-minutersperiod under en vecka, ta reda på vem som har öppet och sedan lagra svaret i en uppslagstabell eller i minneslistan.



  1. 7 strategier för att få ut det mesta av dina möten

  2. Använda Oracle JDeveloper 12c med Oracle Database, del 1

  3. Spring boot - MySQL-inställningarna fungerar inte

  4. är php sortering bättre än mysql sortering efter?