Version complète: sur le forum Webmaster Hub : Problème avec ORDER BY
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
tom_sawyer
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

CODE
$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 whistling.gif

Merci pour votre aide
Tom
petit-ourson
SQL
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
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

CODE
'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 smile.gif
petit-ourson
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
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
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
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 blush.gif je suis pas doué.

Merci encore smile.gif et à charge de revanche j'espère.
Portekoi
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 smile.gif

A toi de voir.


Portekoi
tom_sawyer
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 smile.gif
++
Tom
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.