jer666 Posté(e) le 22 octobre 2007 Partager Posté(e) le 22 octobre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 22 octobre 2007 Partager Posté(e) le 22 octobre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jer666 Posté(e) le 23 octobre 2007 Auteur Partager Posté(e) le 23 octobre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 23 octobre 2007 Partager Posté(e) le 23 octobre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 23 octobre 2007 Partager Posté(e) le 23 octobre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 23 octobre 2007 Partager Posté(e) le 23 octobre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 23 octobre 2007 Partager Posté(e) le 23 octobre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jer666 Posté(e) le 24 octobre 2007 Auteur Partager Posté(e) le 24 octobre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 octobre 2007 Partager Posté(e) le 24 octobre 2007 Et on met [ RESOLU ] quand on est content :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.