Pregunta

tiene un sitio web que contiene una base de datos de lugares. Para cada lugar de nuestros usuarios son capaces de tomar una de las medidas complementarias que registro:

  1. Ver - Vista de perfil que
  2. CALIFICACIÓN - Vota en una escala de 1-5 estrellas
  3. - Revisión que
  4. COMPLETADO - Marca que han estado allí
  5. LISTA DE DESEOS - Marca que quieren ir allí
  6. FAVORITOS - Marcos que es uno de sus favoritos

En nuestra base de datos de la tabla de lugares cada lugar contiene un recuento del número de veces que cada acción de arriba fue tomada, así como la calificación promedio dada por los usuarios.

  • vista
  • Calificaciones
  • avg_rating
  • completado
  • lista
  • favorito

Lo que queremos ser capaces de hacer es generar listas de los mejores lugares utilizando la información anterior. Idealmente, nos queremos ser capaces de generar esta lista mediante una consulta SQL relativamente simple, sin necesidad de hacer ningún trabajo de campo para calcular campos adicionales o lugares de rango pila uno contra el otro. Dicho esto, ya que sólo tenemos unos 50.000 lugares que podíamos ejecutar una tarea programada para calcular las noches algunos campos como la clasificación en diferentes categorías si se haría una diferencia significativa en los resultados globales de los puestos de cabeza.

Te agradecería si pudiera hacer algunas sugerencias sobre cómo debemos pensar que burbujea los mejores lugares para la parte superior, ¿qué criterios hay que ponderar en mayor medida, y dado que la información - sugieren lo que necesitaría la consulta MySQL para parecerse con el fin de seleccionar los 10 primeros lugares.

Una cosa a destacar es que en este momento estamos menos preocupados con el carácter reciente de un lugar de ser popular -. Lo que significa que mirar la información agregada está muy bien y no es necesario que los datos más recientes que ponderar en mayor medida

Gracias de antemano por su ayuda y consejos!

¿Fue útil?

Solución

La fórmula exacta para el favorito tendría que venir de usted, lo llamaremos f (x).
Para la implementación real me gustaría añadir un campo popularity_score que iba a calcular, como usted ha dicho de una tarea programada noche utilizando f (x) para cada fila.

A continuación, se trata simplemente de un caso de hacer un "seleccione el nombre del lugar desde el orden de la tabla por la descripción popularity_score".

Ok - Vamos a darle una puñalada popularity_score = (FAVORITOS * 3 + Finalizado * 2 + WISHLIST) * Puntuación * VER / AVG_VIEWS_OF_ALL_PROFILES

Otros consejos

No tengo una opinión sobre cómo sopesar las cosas.

Dicho esto, ¿por qué no añadir una columna de popularidad a la mesa de ubicación? De repente, la consulta SQL es increíblemente simple.

La parte difícil, por supuesto, es averiguar cómo y cuándo actualizar ese valor. Pero ya que usted está ahorrando todos los datos de actividad, siempre se puede regenerar los valores de la popularidad de las entradas del registro.

De esta manera, se obtiene consultas rápidas agradables para ubicaciones "más populares", y si desea cambiar la forma en que se calcula la popularidad, puede hacerlo a voluntad.

Si eres inteligente, que podría ser capaz de idear una fórmula lo suficientemente simple para que su popularidad se puede seguir en tiempo real. Por ejemplo, si sólo se preocupaba por calificaciones promedio, puede modificar la calificación media con sólo tres variables:. La media de puntuación actual, el número de veces que el objeto ha sido calificado, y el nuevo valor calificación

Por supuesto, las cosas se vuelven más complejas cuando se inicia la mezcla en cuántas veces ha sido visto el objeto, revisado, marcados como favoritos, etc ... pero es posible encontrar que puede idear un método que es suficiente computacionalmente barato que se puede actualizar el valor popularidad general en casi todas las acciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top