Frage

Wir haben eine Website, der eine Datenbank von Orten enthält. Für jeden Ort unserer Benutzer können Sie eine der folgenden Maßnahmen ergreifen, die wir aufnehmen:

  1. VIEW - Blick es Profil
  2. RATING - Bewerten sie auf einer Skala von 1-5 Sterne
  3. REVIEW - Überprüfung it
  4. ABGESCHLOSSEN - Mark, dass sie dort gewesen sind
  5. WISH LIST - Mark, dass sie gehen wollen dort
  6. Favoriten - Mark, dass es einer ihrer Favoriten

In unserer Datenbanktabelle der Orte, jeder Ort enthält eine Zählung der Anzahl der einzelnen Aktion oben sowie die durchschnittliche Bewertung von Nutzern gegeben gemacht.

  • Ansichten
  • Bewertungen
  • avg_rating
  • beendet
  • Wunschliste
  • Favoriten

Was wir heißt in der Lage sein wollen, zu tun, erzeugen Listen der Top-Plätze der oben genannten Informationen verwenden. Im Idealfall würden wir jede Zuarbeit zu tun, ohne dass diese Liste zu generieren indem eine relativ einfache SQL-Abfrage in der Lage sein wollen gegeneinander zusätzliche Felder oder Stapel Rang Orte zu berechnen. That being said, da wir nur etwa 50.000 Plätze haben wir einen nächtlichen Cron-Job ausführen könnten einige Felder wie Rankings auf verschiedene Kategorien zu berechnen, wenn es einen sinnvollen Unterschied in den Gesamtergebnissen unserer Top-Plätze machen würde.

Ich würde es begrüßen, wenn Sie einige Vorschläge machen könnten, wie wir über brodelnden die besten Plätze nach oben denken sollte, die Kriterien, die wir stärker gewichten sollte, und da Informationen - legen nahe, was die MySQL-Abfrage benötigen würde aussehen um die Top 10 Plätze zu wählen.

Eine Sache zu beachten ist, dass wir zu diesem Zeitpunkt weniger beschäftigt sich mit der Aktualität der ein Ort beliebt -. Was bedeutet, dass auf der aggregierten Informationen zu suchen ist in Ordnung und dass neuere Daten braucht nicht stark gewichtet werden

Vielen Dank im Voraus für Ihre Hilfe und Beratung!

War es hilfreich?

Lösung

Die genaue Formel für die Favoriten müßte, von Ihnen kommen, nennen wir es f (x).
Für die eigentliche Implementierung würde ich ein popularity_score Feld hinzufügen, dass ich berechnen, wie man sich von einem nächtlichen Cron-Job, sagte f (x) für jede Zeile verwendet wird.

Dann ist es einfach ein Fall zu tun, ein „wählen Sie Ortsnamen aus der Tabelle, um durch popularity_score desc“.

Ok - sie gibt ihm einen Stich popularity_score = (FAVORITE * 3 + ABGESCHLOSSEN * 2 + WUNSCHZETTEL) * RATING * VIEW / AVG_VIEWS_OF_ALL_PROFILES

Andere Tipps

Ich habe nicht eine Meinung haben, wie die Dinge abzuwägen.

Wie gesagt, warum nicht nur eine Popularität Spalte in die Positionstabelle hinzufügen? Ganz plötzlich, ist Ihre SQL-Abfrage unglaublich einfach.

Der schwierige Teil, natürlich, ist es, herauszufinden, wie und wann dieser Wert zu aktualisieren. Aber da Sie alle die Aktivitätsdaten speichern, können Sie immer regenerieren die Popularität Werte aus den Log-Einträge.

Auf diese Weise erhalten Sie schöner schnelle Abfragen für „most popular“ Standorte, und wenn Sie die Art und Weise Popularität ändern mögen berechnet wird, können Sie dies nach Belieben tun.

Wenn Sie klug sind, könnten Sie in der Lage sein, eine einfache genug Formel zu entwickeln, so dass Popularität in Echtzeit verfolgt werden. Zum Beispiel, wenn wir nur über durchschnittliche Bewertung gepflegt, können Sie die durchschnittliche Bewertung mit nur drei Variablen ändern. Die aktuelle durchschnittliche Bewertung, die Anzahl der Male der Aufgabe bewertet wurde und den neuen Rating-Wert

Natürlich, werden die Dinge komplizierter, wenn Sie beginnen Mischen in wie oft das Objekt gesehen wurde, überprüft, favorisiert, etc ... aber Sie können feststellen, dass Sie eine Methode ersinnen können, die rechnerisch billig genug ist, dass Sie aktualisieren können der Gesamt Popularität Wert auf fast jede Aktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top