jer666 Posted October 22, 2007 Share Posted October 22, 2007 bonjour, j'ai un projet qui me trotte depuis un bail maintenant, et pour le réaliser j'aurais besoin de comprendre comment ordonner les résultats d'une requette selon une formule de calcul. En clair: imaginons une table nommée article avec comme champs id titre contenu vote (1seule vote possible, on vote positif si on aime, si on aime pas on vote pas :)) date (de publication) lecture imaginons maintenant que j'attribu une note au champs vote, date et lecture. par exemple admettons Qu'un vote equivaut a 1 point. Qu'un article du jours equivaut a 50 point et qu'il regresse de 15 point par jours Que 500 lectures equivaut a 1 point comment former ma requette mysql dans mon script en php pour ordonner mes articles du plus gros nombre de point vers le plus bas? en fait c'est une sorte de systeme a la digg ou scoopeo que je cherche a réaliser :) si vous avez une explication, un tuto en francais? je suis preneur merci par avance j'ai cherché mais comme je connais pas les bons termes c'est asp evident Link to comment Share on other sites More sharing options...
Sentinel Posted October 22, 2007 Share Posted October 22, 2007 Deux posibilités : - Ajouter une colonne à ta table, pour contenir le score, qui serait actualisée régulièrement (au moins une fois par jour pour les -15pts, et à chaque vote). Ta requête serait ensuite super simple. - Requêter une procédure stockée qui calculerait le score à la volée Par contre, une unique requête qui calculerait tout ça sans rien stocker en base me paraît impossible. Link to comment Share on other sites More sharing options...
jer666 Posted October 23, 2007 Author Share Posted October 23, 2007 merci pour ta réponse :) par contre j'avous ne pas avoir trop compris ce que tu entends par "Requêter une procédure stockée qui calculerait le score à la volée" si tu pouvais un peu developper? merci beaucoup sentinel Link to comment Share on other sites More sharing options...
Sentinel Posted October 23, 2007 Share Posted October 23, 2007 Je pensais que tu pourrais développer une procédure stockée sur ta base (une sorte de fonction de calcul et de requêtage, hébergée par ta base), qui calculerait dynamiquement le score, et l'appeler au lieu d'effectuer une requête normale. Oracle le permet, PostgreSQL aussi, mais je ne sais pas si mySQL dispose de cette fonction. Link to comment Share on other sites More sharing options...
Spaz001 Posted October 23, 2007 Share Posted October 23, 2007 SELECT *, vote+lecture/500+50-15*DATEDIFF(CURRENT_TIMESTAMP,date) AS Score FROM ta_table ORDER BY Score DESC a supposé bien sur que ton lecture soit incrémenté à chaque lecture Link to comment Share on other sites More sharing options...
Sentinel Posted October 23, 2007 Share Posted October 23, 2007 Du point de vue des perfs, je pense qu'une colonne dédiée au score serait meilleure. Mais sinon, bien vu pour la formule inline, bien que cette méthode montre rapidement ses limites si les règles deviennent un peu complexes. Link to comment Share on other sites More sharing options...
Spaz001 Posted October 23, 2007 Share Posted October 23, 2007 (je n'avais pas vu ta réponse :x , MySQL permet aussi de stocker des procédures, pour info) Oui, une colonne dédié sera plus rapide, forcément :) ; juste un léger souci il me semble, le score est calculé en fonction de la date, résultat tu dois mettre à jour ton score à minuit. A ma connaissance, on ne peux pas déclencher de procédure à un instant donnée, directement dans MySQL (je ne pense pas non plus dans les autres ), donc tu dois avoir recours à une solution tierce dans le cas d'une colonne calculée. Avec la gestion des erreurs qui va avec. Et vu le calcul dans ce cas là, ça prend pas énormément de ressource :) Après, chacun vois midi à sa porte Link to comment Share on other sites More sharing options...
jer666 Posted October 24, 2007 Author Share Posted October 24, 2007 merci a tout les 2 je pense que la solution de spaz est la plus comprehensible et la plus simple :) merci beaucoup a vous 2 j'ai enfin un apperçu d'ensemble et relativement complet des possibilités Link to comment Share on other sites More sharing options...
Sentinel Posted October 24, 2007 Share Posted October 24, 2007 Et on met [ RESOLU ] quand on est content :) Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.