Aller au contenu

Faire un top utilisateurs / articles


Sujets conseillés

Posté

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:

Merci d'avance :)

Posté

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

Posté

Est-ce que cela suffit?

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;

Posté (modifié)

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.

Modifié par Spidetra
Posté

oui je sais ! :wacko:

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?

Posté

Je me permet de reprendre ton code Spidetra ^^

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

Posté (modifié)

Salut,

je crois qu'il faut un 0 avant le 5 dans LIMIT...

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

Modifié par Bourinho
Posté

Les deux fonctionnent :)

Par contre je ne sais pas si en terme de propreté de code celà a une différence :?:

Posté

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! ;)

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+

Posté

Bonjour,

Pourquoi tes colonnes sont en Anglais ? Travail pour un client anglais ou une mode ? :)

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 ;)

Là, tu auras des réponses plus convaincantes...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...