tom_sawyer Posté 10 Juin 2006 Posté 10 Juin 2006 Bonjour à tous j'ai besoin d'un petit coup de main pour la construction d'une requête sql voici ma requête à l'heure actuelle qui fonctionne correctement $top5 = $db->GetAll("SELECT * FROM {$tables['link']['name']} WHERE STATUS = 2 $feat_where ORDER BY RATE DESC LIMIT 0,5"); les résultats de cette requête sont classés selon la valeur vote (RATE), le problème c'est qu'ainsi un lien qui 10 fois la note 10 peut-être derrière un lien avec un seule fois la note 10. J'aimerais donc classer les liens qui ont le même vote par le nombre de votes (RATE_COUNT) ça doit être possible en SQL j'imagine mais je n'arrive pas à trouver la syntaxe. Si une âme charitable et connaissant le sql passe par ici Merci pour votre aide Tom
petit-ourson Posté 10 Juin 2006 Posté 10 Juin 2006 SELECT ID, AVERAGE(RATE) AS MOYENNE FROM {$tables['link']['name']} WHERE STATUS = 2 $feat_where GROUP BY ID ORDER BY MOYENNE DESC LIMIT 0, 5 Il faut passer par un group by et tu fais la moyenne de votes. Enfin bon après sans connaitre la structure, c'est assez compliqué. ID étant pas l'id du vote, mais l'ID de ce qui est voté ...
tom_sawyer Posté 10 Juin 2006 Auteur Posté 10 Juin 2006 Bonsoir Petit-Ourson et merci pour cette réponse rapide J'ai testé la requête ça ne fonctionne pas encore mais je comprends mieux la manière de procéder. ID est pourtant bien la valeur de l'ID de ce qui est voté. pour mieux voir de quoi il retourne voici la structure simplifiée de ma base 'ID' => 'I KEY AUTO','TITLE' => 'C(100) NOTNULL','DESCRIPTION' => 'C(255)','URL' => 'C(255) NOTNULL','CATEGORY_ID' => 'I NOTNULL','RECPR_URL' => 'C(255)','RECPR_REQUIRED' => 'L NOTNULL DEFAULT 0','STATUS' => 'I NOTNULL DEFAULT 0','VALID' => 'L NOTNULL DEFAULT 0','RECPR_VALID' => 'L NOTNULL DEFAULT 0','OWNER_NAME' => 'C(100)','OWNER_EMAIL' => 'C(100)','OWNER_NOTIF' => 'I NOTNULL DEFAULT 0','IPADDRESS' => 'C(15) NOTNULL','DATE_MODIFIED' => 'T DEFDATE','DATE_ADDED' => 'T DEFDATE','HITS' => 'I NOTNULL DEFAULT 0','PAGERANK' => 'I NOTNULL DEFAULT -1','RECPR_PAGERANK' => 'I NOTNULL DEFAULT -1','RATE_TOTAL' => 'I NOTNULL DEFAULT 0','RATE_COUNT' => 'I NOTNULL DEFAULT 0','RATE' => 'I NOTNULL DEFAULT 0', Merci encore pour le coup de patte
petit-ourson Posté 10 Juin 2006 Posté 10 Juin 2006 La je comprends pas ton modèle de données. Où sont les notes enregistrés ? Tu n'as pas un historique des différentes notes ?
tom_sawyer Posté 10 Juin 2006 Auteur Posté 10 Juin 2006 En fait la note est dans RATE et se recalcule à chaque vote en fonction de ce dernier, il n'y a pas d'historique. J'ai juste la note et le nombre de votes.
petit-ourson Posté 10 Juin 2006 Posté 10 Juin 2006 Je ne vois pas trop comment tu peux faire pour différencier les notation alors. Si tu as 100 fois la note 10 c'est mieux qu'une fois la note 10 ? 10 fois la note 10 c'est mieux que 1 fois la note 10 ? Sinon tu fais un ORDER RATE, RATE_COUNT
tom_sawyer Posté 10 Juin 2006 Auteur Posté 10 Juin 2006 Merci pour tes réponse Petit-Ourson en fait oui je souhaite ordonner les résultats par note ensuite pour une note égale je souhaite ordonner les résultats par nombre de votes. Effectivement j'ai fais ORDER BY RATE DESC, RATE_COUNT DESC et ça marche nickel je ne comprends pas je croyais pourtant avoir essayé cette syntaxe je suis pas doué. Merci encore et à charge de revanche j'espère.
Portekoi Posté 11 Juin 2006 Posté 11 Juin 2006 Bonjour, Attention, Petit Ourson met le doigt sur un problème au nivea ude ta structure. En effet, tu ne gardes aucun historique des votes à première vue ce qui laisse la porte ouverte à toutes les fraudes A toi de voir. Portekoi
tom_sawyer Posté 11 Juin 2006 Auteur Posté 11 Juin 2006 Bonjour Portekoi, je ne garde pas d'historique de la notation mais je conserve tout de même l'adresse IP du votant pour l'empêcher de voter plus d'une fois sur un ID. Quels sont les abus possibles dans ce cas ? Qu'est ce que l'historique des votes va changer ? Merci pour votre aide ++ Tom
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant