Recuento de los criterios de búsqueda basado en la búsqueda realizada por el usuario (PHP MYSQL)

Tengo un formulario de búsqueda que proporciona propiedades de búsqueda para vacaciones en un país específico en función de su fecha específica de disponibilidad. La sección de búsqueda tiene 2 secciones “búsqueda básica” y “búsqueda avanzada”.

La búsqueda básica contiene el campo desplegable del país y la fecha. En búsqueda avanzada tenemos filtros múltiples para hoteles como “Habitaciones” (1 habitación, 2 habitaciones, etc.) y luego tipo de propiedad (apartamento, villa, etc.)

Quiero mostrar las opciones del filtro de búsqueda con un recuento como “1 dormitorio (23 propiedades)” y lo mismo para otras opciones de filtro de búsqueda.

Estoy usando php / mysql para crear esta aplicación, así que lo primero que tengo en mente es ejecutar múltiples consultas para todos los filtros de búsqueda y obtener el resultado COUNT de mysql y mostrarlo. Tengo alrededor de 10-12 filtros diferentes en mi página. También tengo que mostrar los registros de recuento dinámicamente en función de todas las opciones de búsqueda (básica y avanzada) seleccionadas.

La ejecución de múltiples consultas en la página hará que se cargue para siempre y no mostrará contenido debido a la carga de múltiples consultas. ¿Hay alguna manera mejor y más rápida de hacer esto?

Por favor ayuda, gracias!

Intenté hacer esto antes, y puede ser muy lento dependiendo de cuántos filtros permitas y de cuántos hoteles incluyas, sin mencionar cómo lidias con hoteles duplicados.

Sin embargo, al final tendrás muy pocas opciones de filtro

  • Tipo de propiedad: normalice esto en una tabla separada
  • Dormitorios: almacene esto como una minúscula o smallint (ya sea sin firmar), no se puede imaginar que haya propiedades por encima de 255 habitaciones, y definitivamente no por encima de 65k
  • Ubicación: normalice esto en una tabla separada, idealmente en formato de árbol para garantizar que se observen las relaciones
  • Clasificación por estrellas: esto se puede almacenar como una minúscula sin firmar

Ahora su problema aquí es que si alguien aplica un filtro de 3 habitaciones hacia arriba, aún debería obtener valores para 2 dormitorios, 1 dormitorio, ya que cambiar el filtro a ese resultado arrojará resultados.

Al final del día, abordé esto usando una tabla de memoria muy grande, algo de lógica para construir sentencias WHERE y JOIN, y una consulta individual que cuenta los registros dentro de una agrupación de conjuntos. Sin embargo, esto fue para hacer similares a los resultados de búsqueda de vacaciones de los usuarios, y como tal, los datos se consideraron completamente transitorios. Para sus propósitos, es probable que una tabla de memoria mucho más pequeña sea aceptable, sin embargo, el principio es similar.

Use la cláusula GROUP BY junto con COUNT en su instrucción SELECT. Por ejemplo, definí una pequeña tabla de prueba como

create table rooms ( rooms INT NOT NULL, name VARCHAR(10) ) 

Y luego ejecuté la consulta

 SELECT rooms,COUNT(*) FROM rooms GROUP BY rooms; 

Esto le da un resultado con cada recuento de habitaciones y el número de entradas con ese valor.

Lo que estás tratando de lograr se llama búsqueda facetada .

Este no es un problema adecuado para una base de datos relacional como MySQL.

Puede usar ElasticSearch o AWS CloudSearch y sus características de facetas .

Solo recuerda que estos son servidores de búsqueda y no reemplazan tu base de datos principal. Solo realizan operaciones de búsqueda que devuelven los ID que corresponden a los registros reales almacenados en su base de datos. Todavía necesita MySQL (o MongoDB, etc.).

    Intereting Posts