Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1256 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1543566
seozus
Posté le 17-04-2007 à 01:20:01  profilanswer
 

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
mood
Publicité
Posté le 17-04-2007 à 01:20:01  profilanswer
 

n°1543568
zecrazytux
Posté le 17-04-2007 à 01:28:39  profilanswer
 

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
n°1543570
seozus
Posté le 17-04-2007 à 01:30:01  profilanswer
 

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

n°1543571
zecrazytux
Posté le 17-04-2007 à 01:36:14  profilanswer
 

c'est pas du PHP mais du SQL
 


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1543572
zecrazytux
Posté le 17-04-2007 à 01:39:16  profilanswer
 

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
n°1543576
seozus
Posté le 17-04-2007 à 02:11:45  profilanswer
 

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

n°1543577
zecrazytux
Posté le 17-04-2007 à 02:13:42  profilanswer
 

décris moi tes tables


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1543578
seozus
Posté le 17-04-2007 à 02:16:24  profilanswer
 

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 ?

n°1543579
zecrazytux
Posté le 17-04-2007 à 02:32:06  profilanswer
 

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
n°1543580
seozus
Posté le 17-04-2007 à 02:32:40  profilanswer
 

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

mood
Publicité
Posté le 17-04-2007 à 02:32:40  profilanswer
 

n°1543581
seozus
Posté le 17-04-2007 à 02:51:19  profilanswer
 

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
n°1543669
zecrazytux
Posté le 17-04-2007 à 11:23:06  profilanswer
 

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


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1543671
MagicBuzz
Posté le 17-04-2007 à 11:25:03  profilanswer
 

si, mais faut mettre un group by sur id aussi


Message édité par MagicBuzz le 17-04-2007 à 11:25:24
n°1543672
MagicBuzz
Posté le 17-04-2007 à 11:25:52  profilanswer
 

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

n°1543674
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-04-2007 à 11:26:46  profilanswer
 

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
n°1543676
zecrazytux
Posté le 17-04-2007 à 11:30:41  profilanswer
 

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


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1543709
MagicBuzz
Posté le 17-04-2007 à 12:05:10  profilanswer
 

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

n°1543713
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-04-2007 à 12:14:03  profilanswer
 

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

n°1543729
MagicBuzz
Posté le 17-04-2007 à 12:31:56  profilanswer
 

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

n°1543767
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-04-2007 à 13:55:16  profilanswer
 

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
n°1543769
MagicBuzz
Posté le 17-04-2007 à 13:57:11  profilanswer
 

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)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Mysql - Compression de données texte / index fulltext ?Mettre en route une base de données Mysql svp
calculer une multiplication de deux champs (mysql)MySql & Builder c++
[Aide] Insertion MySQL à partir d'un fichier .CVS depuis un script PHPRequête MAX sur MySQL
Mysql - Short (50)Ordonner une table à partir d'une autre table
[Java JCBD MySQL] Transposer les données d'une Colonne MySql en plusieurs Colonnes
Plus de sujets relatifs à : Afiicher les 5 résultats les plus nombreux dans une table MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR