sql >> Database >  >> RDS >> Mysql

Tel zoekcriteriarecord op basis van zoekopdracht uitgevoerd door gebruiker (MYSQL PHP)

Ik heb dit eerder geprobeerd en het kan erg traag worden, afhankelijk van hoeveel filters je toestaat en hoeveel hotels je opgeeft, om nog maar te zwijgen van hoe je omgaat met dubbele hotels.

Uiteindelijk heb je echter maar heel weinig filteropties

  • Eigenschapstype:normaliseer dit in een aparte tabel
  • Slaapkamers:sla dit op als een tinyint of smallint (ofwel niet ondertekend), ik kan me niet voorstellen dat er woningen zijn boven 255 slaapkamers, en zeker niet boven 65k
  • Locatie:normaliseer dit in een aparte tabel, idealiter in een boomstructuur om ervoor te zorgen dat relaties worden genoteerd
  • Sterbeoordeling:dit kan worden opgeslagen als een niet-ondertekende tinyint

Je probleem hier is dat als iemand een filter toepast voor 3 slaapkamers en hoger, je nog steeds waarden zou moeten krijgen voor 2 slaapkamers, 1 slaapkamer, omdat het terugzetten van het filter resultaten zal opleveren.

Aan het eind van de dag heb ik dit aangepakt met behulp van een zeer grote geheugentabel, enige logica om WHERE- en JOIN-instructies te bouwen, en een individuele query die records telt binnen een setgroepering. Dit was echter om hetzelfde te doen als de zoekresultaten van gebruikers voor vakanties, en als zodanig werden de gegevens als volledig van voorbijgaande aard beschouwd. Voor uw doeleinden is een veel kleinere geheugentabel waarschijnlijk acceptabel, maar het principe is vergelijkbaar.



  1. lower_case_table_names=1 op Ubuntu 18.04 laat mysql niet starten

  2. Hoe het Query-resultaat in een variabele op te slaan met mysql

  3. onopgeloste verwijzing naar object [INFORMATION_SCHEMA].[TABLES]

  4. Wat is een databank? En een DBMS?