8797 sujets

Développement web côté serveur, CMS

Bonjour, j'ai un problème avec un ORBER BY, je met la requête mysql avant l'explication:
SELECT *  FROM table WHERE  acc='oui' AND ex='non' ORDER BY $order_by DESC LIMIT $1ermess, $nbrmess


Donc voilà, lorsque je veux trier les résultats par note ($order_by=note_video) j'ai un champ dans ma table nommé note_video qui contient la note de chaque vidéo sous cette forme: 15.66 ou encore 19...
Le problème c'est quand une note est inférieur à 10 par exemple 9.44 et bien celle-ci apparait en 1er résultat !! o_O
Voic un exemple de ce que pourrait être les résultats d'une de mes requêtes:
9.548
18.55
17
16
16
15.25
11
10.16

J'ai l'impression que order by interprète les notes sans le point ce qui donne:
9548
1855
17
16
1525
11
1016

Mais il y a encore un problème dans ce cas: en effet 16 est plus petit que 1525 ???

Donc voilà, je ne sais plus quoi faire :euh:

J'ai déja une idée d'où vient le pb, le script qui enregistre les notes dans la base de donnée enregistre les chiffres décimaux avec un point, et non une virgule de plus mon champ note_video est en varchar(5) (deux chiffre . deux décimles).

Pour finir voici comment je calcul la note:
$note_final= $total_vote / $nbr_vote;

$total_vote est l'addition de toutes les valeurs des votes (15+14+1+20+3+45 ......)
$nbr_vote est le nombre de votants (1+1+1+1+1+1+1+1+1.....)
et $note finale est enregistrée dans la base de donné en varchar(5)

Donc voilà à peu près toutes les infos
Merci d'avance pour votre aide !
Modifié par adri5656 (16 Jul 2008 - 00:10)
Hello,
adri5656 a écrit :
et $note finale est enregistrée dans la base de donné en varchar(5)
Donc le tri fonctionne bien Smiley lol !

Si tu veux trier des nombres, il faut obligatoirement que le champ de ta table soit de type numérique Smiley cligne !

A+
Et pour les convertir en numérique vu qu'il y a des décimales, la méthode parseFloat() semble approprié.
De même que pour arrondir ta moyenne la méthode round() semble aussi utile, cela t'évitera des moyennes ahurissantes^^
Modérateur
Salut,

adri5656 a écrit :

$note_final= $total_vote / $nbr_vote;



Juste une petite remarque. tu peux faire ce genre de choses avec Mysql en faisant ceci également :


SELECT AVG(note_video) AS moyenne FROM table;


++

PS : Arf, Heyoan, tu écris plus vite que moi Smiley confus
Modifié par Nolem (15 Jul 2008 - 17:24)
makata a écrit :
Et pour les convertir en numérique vu qu'il y a des décimales, la méthode parseFloat() semble approprié.
Euh... à ma connaissance il n'y a pas d'équivalent de la fonction Javascript ParseFloat() : PHP se débrouille tout seul en modifiant le type de variable si besoin Smiley murf !


Edit: au passage j'ai une petite préférence pour php.net plutôt que Nexen car il y a toujours plein d'exemples en commentaires. Par exemple : round.
Modifié par Heyoan (15 Jul 2008 - 17:36)
Merci beaucoup pour vos réponses, en faite c'était tout con, et oui, au fur et au mesure que j'écrivais le message, je me doutait de plus en plus d'où venait le problème, mais je ne savais pas quel type de champ choisir, donc un bon float et un round($note, 2) pour arrondir à réglé le problème, merci beaucoup !