2010-10-28 4 views
0

je cet algorithme php fonction de classement (de nouvelles hacker):Passer des lignes mysql à l'algorithme de notation?

function calculate_score($votes, $item_hour_age, $gravity=1.8){ 
    return ($votes - 1)/pow(($item_hour_age+2), $gravity); 
} 

Et je cette table MySql:

post{id, post_text, votes, date}: 

Je me demandais comment puis-je transmettre ces paramètres de données MySql à cette fonction , pour déterminer l'ordre dans lequel ils vont, PS. $item_hour_age, est combien d'heures le poste a été posté.

Répondre

2

Eh bien, vous avez déjà votes $, donc il vous suffit de changer date $ en heures puis:

$item_hour_age = (time() - $date)/60/60; // minutes+seconds 

Monter la sortie dans un tableau de résultat et le tri:

foreach ($pdo->fetchAll() as $article) { 

    $score = calculate_score(...); 

    $r[$score] = $article; 
} 
krsort($r); 

boucle Après sur la liste des articles de $ r et les sortir.

+0

merci, mais comment puis-je commander mes résultats en utilisant cette fonction? quand je passe les paramètres – getaway

+0

Vous devrez les assembler, utiliser le score comme index de tableau ... – mario

+0

c'est ce que je ne reçois pas, im nouveau à php – getaway

1

Je ne connais pas vos spécifications dans les détails, mais vous pouvez utiliser une requête MySQL.

simple, et probablement beaucoup plus rapide en termes de CPU et de la mémoire, ce qui permet la pagination des résultats possibles (si vous en avez besoin) avec moins d'utilisation de la mémoire PHP

SELECT t. *, (votes -1)/POW ((DATE_DIFF (NOW(), date)), 1.8) le score FROM table ORDER par le score DESC

je supposé item_hour_age $ c'est la différence de jours. Vous pouvez facilement utiliser les heures via une conversion en timestamps

Questions connexes