Afiicher les 5 résultats les plus nombreux dans une table MySQL

Afiicher les 5 résultats les plus nombreux dans une table MySQL - PHP - Programmation

Marsh Posté le 17-04-2007 à 01:20:01    

Bonjour a tous, j'ai un site de quiz et j'utilise la portion de code suivante pour afficher mes 5 plus recents quiz sur ma homepage:

Code :
  1. <?php
  2. $connection=mysql_connect("xxx","xxx","xxx" );
  3. mysql_select_db("test" );
  4. $sql=mysql_query("SELECT post_id,post_titre FROM dc_post ORDER BY post_id DESC LIMIT 0,5" );
  5. while($result=mysql_fetch_row($sql))
  6. print '<a href=viewquiz.php?t='.$result[0].' >'.$result[1].'</a><br>';
  7. ?>


 
Mais le probleme, c'est que je veux aussi afficher les plus populaires, pour cela je dois trouver dans ma table "statistics' les 5 quiz donc l'id revient le plus souvent. Ça doit bien être possible, mais comment ?


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 17-04-2007 à 01:20:01   

Reply

Marsh Posté le 17-04-2007 à 01:28:39    

j'ai pas tout lu jregarde une video, mais celon ta derniere phrase je dirai d'utiliser MAX(COUNT(id))


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 01:30:01    

Je suis assez novice en php, il me faudrait seulement un exemple d'utilisation ici ou quelque par sur le net, j'ai déja fait les recherches ...

Reply

Marsh Posté le 17-04-2007 à 01:36:14    

c'est pas du PHP mais du SQL
 


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 01:39:16    

bon jvien de comprendre ^^ pendant un passage chiant du film
 
ta deux tables
 
donc tu fait une requete qui choppe les id des 5 plus populaires news, puis tu les affiche.
 
COUNT(champ) permet de ... compter :) le nombre de row


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 02:11:45    

Peux tu m'écrire un exemple de requete, parce que je ne te suis pas lol!

Reply

Marsh Posté le 17-04-2007 à 02:13:42    

décris moi tes tables


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 02:16:24    

la table statictics contient les résultats de tout les quiz qui ont été répondus, donc chaque enregistrement a comme 'id' celui de quiz répondu une fois, donc plus ce 'id' est présent, plus il est populaire.
 
le order doit etre en fonction du total compté ...
beosin d'autres choses ?

Reply

Marsh Posté le 17-04-2007 à 02:32:06    

non
 
premiere requete:
 
SELECT id FROM statistics ORDER BY COUNT(id) DESC LIMIT 0,5
 
tu fetch
 
SELECT * FROM quizz WHERE id=$id
 
mais c'est pssible que je dise des conneries a cette heure devant un film :s


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 02:32:40    

c'est bon je vais essayer, merci ...

Reply

Marsh Posté le 17-04-2007 à 02:32:40   

Reply

Marsh Posté le 17-04-2007 à 02:51:19    

J'utilise ceci qui me semblait correct (selon tes indications):

Code :
  1. <?php
  2. $connection=mysql_connect("xxx","xx","xxx" );
  3. mysql_select_db("test" );
  4. $sql=mysql_query("SELECT setid FROM statistics ORDER BY COUNT(setid) DESC LIMIT 0,5" );
  5. while($result=mysql_fetch_row($sql))
  6. print '<a href=viewquiz.php?t='.$result[0].' >'.$result[0].'</a><br>';
  7. ?>


Mais j'obtien cette erreur: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource

 


Message édité par seozus le 17-04-2007 à 02:51:45
Reply

Marsh Posté le 17-04-2007 à 11:23:06    

merde tu peux pas foutre de COUNT() dans un ORDER BY ?
gnééé heuuu


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 11:25:03    

si, mais faut mettre un group by sur id aussi


Message édité par MagicBuzz le 17-04-2007 à 11:25:24
Reply

Marsh Posté le 17-04-2007 à 11:25:52    

SELECT setid FROM statistics group by id ORDER BY COUNT(*) DESC LIMIT 0,5

Reply

Marsh Posté le 17-04-2007 à 11:26:46    

s'ta dire qu'il faut qu'il soit dans les champs "selectés" pour pouvoir faire un order dessus [:w3c compliant] ...

Code :
  1. $sql=mysql_query("SELECT setid, count(setid) FROM statistics GROUP BY setid ORDER BY COUNT(setid) DESC LIMIT 0,5" );


edit: ah bin non y'a pas besoin... mais je trouve ça dégueu :o

Message cité 1 fois
Message édité par anapajari le 17-04-2007 à 11:27:52
Reply

Marsh Posté le 17-04-2007 à 11:30:41    

non pas besoin :)
par contre merci MagicBuzz j'avais zappé le group by :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 17-04-2007 à 12:05:10    

anapajari a écrit :

s'ta dire qu'il faut qu'il soit dans les champs "selectés" pour pouvoir faire un order dessus [:w3c compliant] ...

Code :
  1. $sql=mysql_query("SELECT setid, count(setid) FROM statistics GROUP BY setid ORDER BY COUNT(setid) DESC LIMIT 0,5" );


edit: ah bin non y'a pas besoin... mais je trouve ça dégueu :o


ouais non, tu peux trier par ce que tu veux, pas besoin de sélectionner ;))
 
tu peux même trier par un sous-select si tu veux :D

Reply

Marsh Posté le 17-04-2007 à 12:14:03    

nan mais ça d'accord, mais je continue de trouver ça dégueu quand même [:spamafote]
genre:

Code :
  1. select a from table group by a,b order by count(*), b


je trouve vraiment pas ça terrible puisqu'il y a gros risque d'oubli que b sert également à l'aggregat ... mais bon ça marche ...

Reply

Marsh Posté le 17-04-2007 à 12:31:56    

ça de l'optimisation pour éviter d'utiliser de la mémoire avec des données retournées dans le dataset qui servent à rien :D
 
après, comme dans le cas général, dès qu'on commence à faire de l'optimisation, on commence l'imbittabilité et la non-maintenabilité :)

Reply

Marsh Posté le 17-04-2007 à 13:55:16    

MagicBuzz a écrit :

ça de l'optimisation pour éviter d'utiliser de la mémoire avec des données retournées dans le dataset qui servent à rien :D


\o/ optimisons tous les données retournées par un fetch avec un limit 0,5 ...  :ange:


Message édité par anapajari le 17-04-2007 à 13:55:23
Reply

Marsh Posté le 17-04-2007 à 13:57:11    

oui mais tu te rends pas compte, si ça tourne sur un 8086 avec 256 Ko de mémoire vive, et qu'il y a 100 000 connectés en même temps :o
(ah bon, même comme ça ça suffit pas à saturer la mémoire ? :D)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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