gomoteur Posté 14 Août 2006 Posté 14 Août 2006 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??? Merci d'avance
Sarc Posté 14 Août 2006 Posté 14 Août 2006 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 Posté 14 Août 2006 Auteur Posté 14 Août 2006 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;
Spidetra Posté 14 Août 2006 Posté 14 Août 2006 (modifié) SELECT user, count(*) AS NbArticleFROM articles GROUP BY userORDER 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é 14 Août 2006 par Spidetra
gomoteur Posté 14 Août 2006 Auteur Posté 14 Août 2006 oui je sais ! 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 Posté 14 Août 2006 Posté 14 Août 2006 Je me permet de reprendre ton code Spidetra SELECT user, count(*) AS NbArticleFROM articles GROUP BY userORDER BY count(*) desc limit 5;
Bourinho Posté 14 Août 2006 Posté 14 Août 2006 (modifié) Salut, je crois qu'il faut un 0 avant le 5 dans LIMIT... SELECT user AS user,count(*) AS NbArticleFROM articles GROUP BY userORDER BY NbArticleDESC LIMIT 0,5; le 0 est la pour dire que tu prends les 5 PREMIERS... Modifié 14 Août 2006 par Bourinho
Belf Posté 14 Août 2006 Posté 14 Août 2006 Les deux fonctionnent Par contre je ne sais pas si en terme de propreté de code celà a une différence
Bourinho Posté 14 Août 2006 Posté 14 Août 2006 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+
Sarc Posté 15 Août 2006 Posté 15 Août 2006 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...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant