Aller au contenu

Problème avec ORDER BY


tom_sawyer

Sujets conseillés

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 :whistling:

Merci pour votre aide

Tom

Lien vers le commentaire
Partager sur d’autres sites

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é ...

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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: je suis pas doué.

Merci encore :) et à charge de revanche j'espère.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...