Je suis intéressé à utiliser ce classement de classement , basé sur un article par evan Miller Pour classer un tableau que j'ai qui a des upvotes et des bowvotes. J'ai un système très similaire au système de vote haut / bas de la pile pour un site d'événements que je travaille et en utilisant ce classement de classement, je me sens comme si les résultats seront plus précis. Ma question est de savoir comment puis-je commander par la fonction 'HOTNESS'?
SELECT widget_id, ((positive + 1.9208) / (positive + negative) - 1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / (positive + negative)) / (1 + 3.8416 / (positive + negative)) AS ci_lower_bound FROM widgets WHERE positive + negative > 0 ORDER BY ci_lower_bound DESC;
3 Réponses :
Accéder à la table "Posts" correspondante pour quoi que ce soit (lecture, écriture, tri, comparaison, etc.) est extrêmement rapide et s'appuie donc sur la base de données est l'alternative "la plus sur la mouche" que vous avez pour non temporaire Stockage de données (la mémoire / des sessions sont encore plus rapides mais, logiquement, ne peuvent pas être utilisées pour stocker ces informations). P>
Vous devriez être plus inquiet de construire un bon algorithme de classement offrant les résultats que vous souhaitez (vous proposez deux systèmes différents, offrant des résultats différents) et vous permettant de rendre l'ensemble du code et de la communication de la base de données de code aussi efficace que possible. p>
En principe, de petits codes avec des commandes simples itératives offrent la solution la plus rapide et la plus fiable pour ce type de situations. Exemple: p>
fonction de classement (comme le premier que vous proposez ou tout autre construit sur les règles de classement que vous voulez) appelé chaque fois un le vote est donné. Il écrit à la ou les colonnes correspondantes dans le Table "Posts" (la requête plus simple, meilleure: vous pouvez créer un le système de classement aussi complexe que vous le souhaitez, mais essayez de compter sur PHP plutôt que sur les requêtes). P> li>
Chaque fois qu'une comparaison entre les postes est requise, la table "Posts" est lue avec une sélection simple commande les enregistrements par classement (Vous pouvez avoir diverses "colonnes d'évaluation" (par exemple, des votes en haut, votes en bas, autres considérations); mais mieux en avoir un avec le classement définitif). P> li> ol>
Je ne suis pas sûr que si cela est possible avec votre DB et votre schéma, avez-vous déjà envisagé d'écrire un UDF pour le tri personnalisé? p>
Un poste de Stackoverflow parle de savoir comment faire cela Ici. p>
Vous avez raison, question comme celle-ci est plutôt désordonnée et chère également. P>
mixte php / mysql à la volée est une mauvaise idée bien car vous devrez sélectionner des valeurs pour tous les messages et calculer la hotness, puis sélectionner une liste des plus chaudes. Extrêmement cher. P>
Vous devez envisager d'économiser au moins une partie de votre calcul à la base de données. Certainement, la commande devrait aller à la base de données. Il est toujours préférable de calculer quelque chose et d'enregistrer une seule fois sur chaque sauvegarde / mise à jour, au lieu de calculer chaque fois qu'il sera affiché. Essayez de faire une référence sur le temps que vous économiserez en calculant la commande sur Enregistrer / mettre à jour au lieu de chaque fois que vous calculez la chaleur. Bonne chose est que l'ordre ne change jamais, sauf si une personne upvote / bowvotes que vous économisez sur la DB quand même, identique pour le signe. P>
Même si vous enregistrez le panneau sur la DB, vous n'êtes pas capable d'éviter de calculer à la volée en raison du paramètre horodatage posté. P>
Je verrais quelle différence cela fait-il et où il fait une différence et calcule la hotness avec un script CLI chaque fois que la quantité de temps que pour les scripts où cela est crucial, chaque fois que cela fait moins de différence . P>
Prendre cette approche, vous ne recalculerez que la chaleur que si nécessaire. Cela rendra votre application beaucoup plus efficace. P>
Jetez un coup d'œil à cela, cela pourrait vous aider. blog.glocal.com/2012/12/ ...