Posté(e) le 22 octobre 200717 a 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 Modifié le 25 octobre 200717 a par jer666
Posté(e) le 22 octobre 200717 a 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.
Posté(e) le 23 octobre 200717 a Auteur 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
Posté(e) le 23 octobre 200717 a 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.
Posté(e) le 23 octobre 200717 a 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
Posté(e) le 23 octobre 200717 a 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.
Posté(e) le 23 octobre 200717 a (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
Posté(e) le 24 octobre 200717 a Auteur 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
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.