Comment puis-je ordonner une liste de résultat?

Comment puis-je ordonner une liste de résultat? - PHP - Programmation

Marsh Posté le 26-03-2008 à 14:30:35    

Bonjour,

 

j'essaye d'organiser une série d'article en fonction de leur score. Or, les score ne sont pas stockés dans la base de donnés. Il y a, à la place, la liste des ID des utilisateurs ayant voté pour l'article. Ça se présente de cette façon :

 

Table : votes

  • Champ > ID
  • Champ > Post (valeur numérique qui correspond à l'ID de l'article)
  • Champ > votes (exemple de valeur : ,2,3,4,5) les numéros correspondent aux ID des votant


Ma fonction pour récupérer la liste des articles et leur score respectif (il y a du code wordpress dedans, mais rien de bien méchant : $wpdb->get_result correspondant à une requête de type fetch_array et get_post($requete->post)->post_title retourne le nom de l'article correspondant à l'ID stocké dans la table "votes" )  :

 
Code :
  1. //display list of post
  2. function DisplayListdeux() {
  3. global $wpdb;
  4. //Zou, on récupère ce qui nous interesse
  5. $requetes = $wpdb->get_results("SELECT votes, post FROM ".$wpdb->prefix."votes" );
  6. foreach ($requetes as $requete) {
  7. //on éclate la liste des utilisateurs ayant voté pour le billet afin de faciliter le comptage
  8. $lesvotes = explode(",", $requete->votes);
  9. //On Calcule le score du billet
  10. $votecount = count($lesvotes) - 1;
  11. //On Affiche la liste
  12. echo get_post($requete->post)->post_title.' Score : ';
  13. echo $votecount.'<br />';
  14. }
  15. }
 

J'aimerai classer les article du mieux noté, au moins bien noté. Comment dois-je m'y prendre?

 

Merci à vous!

 


Message édité par Masterpingouin le 26-03-2008 à 14:39:48
Reply

Marsh Posté le 26-03-2008 à 14:30:35   

Reply

Marsh Posté le 26-03-2008 à 14:33:50    

tu peux pas le faire directement dans ta requête? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 14:40:42    

Je ne sais pas le faire, tu peux peut-être me l'indiquer? Merci ;)
Vu que les scores ne sont pas stockés dans la bdd, je vois mal comment je pourrai utiliser un ORDER BY (^-^)


Message édité par Masterpingouin le 26-03-2008 à 14:42:08
Reply

Marsh Posté le 26-03-2008 à 14:46:21    

Ah oui, c'est super laid, j'avais pas regardé en détail comment tu calcules le score.[:pingouino]
Qui a eu l'idée saugrenue de stocker les votes comme ça?[:roane]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 14:49:20    

un abruti sûrement (^-^), j'essaye d'exploiter un plugin wordpress qui a le mérite d'être léger. On sait maintenant pourquoi ;) Tu n'as pas une solutions coté php?

Reply

Marsh Posté le 26-03-2008 à 14:50:10    

ah ben si, ordonner un tableau n'a rien de sorcier...fonction usort() et ses copines! ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:05:42    

(@-@), ça, c'est quelque chose que je ne sais pas faire, pourrai-tu me mettre sur la voie, je suis un grand néophyte en PHP T-T Merci!

Reply

Marsh Posté le 26-03-2008 à 15:08:12    

Il s'agit juste de définir une fonction qui sait ordonner deux éléments, et de la passer à usort()...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:11:25    

Décidément néophyte est un bien faible mot pour définir ma médiocrité en PHP XD Je n'en suis même pas capable. J'ai juste appris bêtement certain rouages PHP.
 
As-tu une portion de code à me proposer?
Désolé, j'en demande peut-être trop *blush*

Reply

Marsh Posté le 26-03-2008 à 15:12:34    

Il y a un exemple dans la doc...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:12:34   

Reply

Marsh Posté le 26-03-2008 à 15:20:09    

le problème, c'est que ma variable $votecount ne contient pas plusieurs valeurs. c'est juste une variable qui contient un seul est unique score. Vraiment, je ne vois pas comment m'y prendre.
 
Désolé de t'embêter avec ça, mais je sature un peu XD

Reply

Marsh Posté le 26-03-2008 à 15:22:13    

Masterpingouin a écrit :

le problème, c'est que ma variable $votecount ne contient pas plusieurs valeurs. c'est juste une variable qui contient un seul est unique score. Vraiment, je ne vois pas comment m'y prendre.
 
Désolé de t'embêter avec ça, mais je sature un peu XD


 
plusieurs solutions:  
1) Dans ta requête tu comptes les virgules de ton champ votes, et tu fais un order by là-dessus.:D
2) Tu mets tous tes résultats dans un tableau avant de les afficher, tu ordonnes le tableau, et ensuite tu le parcours pour afficher.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:36:29    

En gros il faut que je passe SELECT COUNT(,) AS score
FROM votes?

Reply

Marsh Posté le 26-03-2008 à 15:37:11    

en très très gros, alors.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:44:06    

je te l'ai dis, je n'ai aucune logique ^^
J'ai essaye d'intégrer ça dans ma requête et il me retourne une erreur.

Reply

Marsh Posté le 26-03-2008 à 15:45:49    

Il va falloir soit te mettre au sql, soit au php, je ne peux ni ne veux te donner plus que ce que je t'ai dit...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 15:54:42    

Ça, je l'ai bien comprit. Le problème c'est que là, je ne peux pas apprendre de mes erreurs : J'ai beau chercher, je ne trouve aucun exemple où Count() décompte le nombre de virgules voir le nombre de mots dans une cellule.

 

Merci quand même...


Message édité par Masterpingouin le 26-03-2008 à 16:00:27
Reply

Marsh Posté le 26-03-2008 à 15:56:30    

Cherche dans la doc de ton sgbd ce qu'il y a de disponible comme fonctions de traitement de chaines de caractères...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-03-2008 à 16:21:45    

Apparemment il faut que je combine COUNT et SUBSTR pour que count puisse compter les virgules, je suis sur la bonne voie?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed