Jeśli chcesz tylko spojrzeć na pojedynczy tydzień na raz, możesz kanonizować wszystkie godziny otwarcia/zamknięcia, aby ustawić liczbę minut od początku tygodnia, powiedzmy niedziela 0 godz. Dla każdego sklepu tworzysz pewną liczbę krotek w postaci [czas rozpoczęcia, czas zakończenia, identyfikator sklepu]. (W przypadku godzin, które obejmowały północ w niedzielę, musiałbyś utworzyć dwie krotki, jedną biegnącą do końca tygodnia, a drugą rozpoczynającą się na początku tygodnia). Ten zestaw krotek byłby indeksowany (powiedzmy, z drzewem, które chcesz wstępnie przetworzyć) zarówno w startTime, jak i endTime. Krotki nie powinny być tak duże:tygodniowo jest tylko około 10 000 minut, co może zmieścić się w 2 bajtach. Ta struktura byłaby wdzięczna w tabeli MySQL z odpowiednimi indeksami i byłaby bardzo odporna na ciągłe wstawianie i usuwanie rekordów w miarę zmiany informacji. Twoje zapytanie będzie po prostu „wybierz identyfikator sklepu, gdzie startTime <=czas i endtime>=czas”, gdzie czas to kanoniczne minuty od północy w niedzielę.
Jeśli informacje nie zmieniają się zbyt często i chcesz, aby wyszukiwania były bardzo szybkie, możesz rozwiązać wszystkie możliwe zapytania z góry i buforować wyniki. Na przykład w tygodniu są tylko 672 okresy kwadransowe. Mając listę firm, z których każda miała listę godzin otwarcia i zamknięcia, taką jak rozwiązanie Brandona Rhodesa, możesz po prostu iterować co 15 minut w ciągu tygodnia, dowiedzieć się, kto jest otwarty, a następnie zapisać odpowiedź w tabeli wyszukiwania lub lista w pamięci.