Version complète: sur le forum Webmaster Hub : Faire un top utilisateurs / articles
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
gomoteur
Bonsoir!

Voila mon petit souci.

J'ai 2 tables : utilisateurs et articles

articles : user | titre | ...
utilisateurs : username | password ...

Je voudrais faire un top des 5 utilisateurs ayant posté le plus d'articles.
En affichant le N° du podium + le pseudo + le nombre total d'articles kil a posté

Mais je n'ai aucun idée de comment faire la chose :s

Pouvez vous m'aider??? blush.gif

Merci d'avance smile.gif
sarc
Salut !

Il nous faudrait une structure exacte de ta base de données pour pouvoir répondre à ça.. Et surtout le lien exact entre les deux tables !

Sinon, il faudra faire une requète SQL sur une base de count(), avec un ORDER, et tu auras comme ça un premier tri avec le nombre d'articles pour chaque utilisateur. Dans la requète, il faut se débrouiller pour avoir également le pseudo du membre, et tu pourras donc utiliser directement en PHP le résultat de ta requète SQL pour afficher un tableau des premiers !

Sans détails, je ne saurais t'en dire plus..
gomoteur
Est-ce que cela suffit?

SQL
CREATE TABLE `articles` (
`user` varchar(20) NOT NULL default '', // c'est le nom de l'utilisateur qui est dans la table utilisateurs
`title` varchar(70) NOT NULL default '',
`contenu` varchar(200) NOT NULL default '',
`description` varchar(255) default NULL,
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`),
FULLTEXT KEY `title` (`title`,`contenu`,`description`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


CREATE TABLE `utilisateurs` (
`username` varchar(50) NOT NULL default '',
`password` varchar(50) NOT NULL default '',
`language` varchar(20) NOT NULL default 'francais',
`email` varchar(255) NOT NULL default '',
UNIQUE KEY `id` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Spidetra
SQL
SELECT user, count(*) AS NbArticle
FROM articles GROUP BY user
ORDER BY count(*) desc


J'espère que tu as quand même conscience que les structures de tes tables ne sont pas idéales pour obtenir de bonnes performance.
gomoteur
oui je sais ! wacko.gif
mais le PHP&MySQL je le connais que depuis quelques semaines...
donc voila j'essaye d'apprendre et de m'améliorer!
mais merci beaucoup !!
comment peut-on en afficher que 5?
Belf
Je me permet de reprendre ton code Spidetra happy.gif

CODE
SELECT user, count(*) AS NbArticle
FROM articles GROUP BY user
ORDER BY count(*) desc limit 5;
Bourinho
Salut,

je crois qu'il faut un 0 avant le 5 dans LIMIT...
CODE
SELECT user AS user,
count(*) AS NbArticle
FROM articles
GROUP BY user
ORDER BY NbArticle
DESC LIMIT 0,5;


le 0 est la pour dire que tu prends les 5 PREMIERS...
Belf
Les deux fonctionnent smile.gif

Par contre je ne sais pas si en terme de propreté de code celà a une différence r_question6161.gif
Bourinho
Salut,

en fait, j'ai (a moitie) appris SQL sur le Hub... et a chaque fois que l'on selectionnait les premiers, les Hubeurs mettaient le "0,", du coup, je le mets tout le temps...

Je ne savais meme pas que cela fonctionnait sans! wink.gif

Quant a la proprete, je ne peux pas te repondre car etant donne qu il y a encore dix minutes, je croyais que le "0," etait necessaire, je pensais que ma solution etait la plus propre...

A+
gomoteur
Et comment afficher ça avec PHP? happy.gif
sarc
Bonjour,

Pourquoi tes colonnes sont en Anglais ? Travail pour un client anglais ou une mode ? smile.gif

Pour ce qui est de ta table, je vais t'expliquer rapidement ce qu'il vaudrait mieux faire :
Dans utilisateurs, tu dois mettre une colonne ID unique auto_increment, qui sera l'id de chaque membre. Ensuite, dans article, il faut juste mettre une colonne id_auteur qui correspondra à l'id du membre qui aura écrit l'article. Pas besoin de faire des doublons des noms, il vaut mieux mettre des numéros qui sont plus légers et qui ne posent pas de problèmes d'écriture..

Pour ce qui est de la requète SQL, je crois que Limit 5 et Limit 0,5 sont exactement identiques, du moins j'ai jamais rien lu de contraire.


Et gomoteur, on va pas t'écrire tout ton script ici, ce n'est pas du tout le but de ce forum, le but est de débloquer les gens qui cherchent à écrire quelque chose, et à leur proposer une solution à leur problème.
Il faudrait que tu cherches des tutoriaux sur internet, que tu te mettes réellement au PHP+Sql, que tu tentes de faire des choses, et ensuite que tu demandes quelque chose si ça ne marche pas wink.gif

Là, tu auras des réponses plus convaincantes...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.