Опитвах се да направя това и преди и може да стане много бавно в зависимост от това колко филтри разрешавате и колко хотела изброявате, да не говорим как се справяте с дублиращите се хотели.
В крайна сметка обаче ще имате много малко опции за филтриране
- Тип свойство :нормализирайте това в отделна таблица
- Спални :съхранявайте това като tinyint или smallint (или без подпис), не мога да си представя, че има имоти над 255 спални и определено не над 65k
- Местоположение:нормализирайте това в отделна таблица, в идеалния случай в дървовиден формат, за да сте сигурни, че връзките са отбелязани
- Оценка със звезди:това може да се съхранява като tinyint неподписан
Проблемът ви тук е, че ако някой приложи филтър за 3 спални нагоре, все пак трябва да получавате стойности за 2 спални, 1 спалня, тъй като смяната на филтъра обратно към това ще даде резултати.
В края на деня се обърнах към това, използвайки много голяма таблица с памет, някаква логика за изграждане на изрази WHERE и JOIN и индивидуална заявка, преброяваща записи в рамките на групиране. Това обаче беше за извършване на подобни резултати от търсенето на потребителите през празничните дни и като такива данните се считаха за изцяло преходни. За вашите цели вероятно е приемлива далеч по-малка таблица с памет, но принципът е подобен.