Próbowałem to zrobić wcześniej i może to działać bardzo wolno w zależności od liczby dozwolonych filtrów i liczby hoteli, które umieszczasz, nie wspominając o tym, jak radzisz sobie z duplikatami hoteli.
Ostatecznie jednak będziesz mieć bardzo mało opcji filtrowania
- Typ właściwości:znormalizuj to w osobnej tabeli
- Sypialnie:zapisz to jako maleńkie lub małe (niepodpisane), nie wyobrażaj sobie, że istnieją nieruchomości powyżej 255 sypialni, a na pewno nie powyżej 65 tys.
- Lokalizacja:znormalizuj to w osobnej tabeli, najlepiej w formacie drzewa, aby zapewnić odnotowanie relacji
- Ocena w postaci gwiazdek:może być przechowywana jako tinyint unsigned
Teraz twój problem polega na tym, że jeśli ktoś zastosuje filtr dla 3 sypialni w górę, nadal powinieneś otrzymywać wartości dla 2 sypialni i 1 sypialni, ponieważ zmiana filtra z powrotem na ten przyniesie rezultaty.
Pod koniec dnia rozwiązałem ten problem, używając bardzo dużej tabeli pamięci, pewnej logiki do budowania instrukcji WHERE i JOIN oraz indywidualnego zapytania zliczającego rekordy w ramach grupowania zestawu. Miało to jednak na celu zrobienie podobnych wyników wyszukiwania dla użytkowników z wakacji i jako takie dane uznano za całkowicie nietrwałe. Dla twoich celów prawdopodobnie akceptowalna będzie znacznie mniejsza tablica pamięci, jednak zasada jest podobna.