Requête Sql de trie j'arrive pas celle là


linkadress
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 30 Mar 2006

Requête Sql de trie j'arrive pas celle là

Message le Ven Avr 28, 2006 14:55

Bon, après moulte recherche sur le langage SQL, je me décide à demander un conseil ou plutôt une solution si possible...

Je n'arrive pas à trier dans ma base les répétitions de pseudo posteur...
Si le pseudoA postent 10 liens et le posteurB postent 20liens ainsi de suite...

Je voudrais faire un Top Posteur en gros, classé par celui qui a le plus posté.

Toutou-Fr
WRInaute impliqué
WRInaute impliqué
 
Messages: 642
Inscription: 22 Aoû 2005

Message le Ven Avr 28, 2006 15:05

voici la structure :

select posteur,count(posteur) as nb_posts from table order by nb_posts desc

ensuite, c'est à adapter en fonction de ta table évidemment ;)

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Ven Avr 28, 2006 15:09

... group by posteur


linkadress
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 30 Mar 2006

Message le Ven Avr 28, 2006 15:44

Merci, j'avance déjà un peu avec votre requête, le truc dont je viens de me rendre compte, c'est que je fais pas d'update, d'un champ nbposts / pseudo, donc j'ai un paramètre manquant...

Donc il faut que je calcule le nb de fois ou on trouve un pseudo que je joigne à une comparaison avec les autres pseudos et que je ressorte un classement ...

Mais je ne vois pas la syntaxe...

Toutou-Fr
WRInaute impliqué
WRInaute impliqué
 
Messages: 642
Inscription: 22 Aoû 2005

Message le Ven Avr 28, 2006 15:55

spidetra a écrit:... group by posteur


evidemment, si je compte le nombre de posts total à chaque fois, ca ne va pas le faire ... :oops: petite étourderie..

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Ven Avr 28, 2006 16:00

Code: Tout sélectionner
--
-- Table structure for table `test`.`post`
--

DROP TABLE IF EXISTS `post`;
CREATE TABLE `post` (
  `IDPost` int(10) unsigned NOT NULL auto_increment,
  `IDPseudo` int(10) unsigned default NULL,
  `link` varchar(45),
  PRIMARY KEY  (`IDPost`),
  KEY `FK_post_1` (`IDPseudo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `test`.`post`
--

/*!40000 ALTER TABLE `post` DISABLE KEYS */;
INSERT INTO `post` (`IDPost`,`IDPseudo`,`link`) VALUES
(1,1,'linkA1'),
(2,1,'linkA2'),
(3,1,'linkA3'),
(4,2,'linkB1'),
(5,2,'linkB2');
/*!40000 ALTER TABLE `post` ENABLE KEYS */;

--
-- Table structure for table `test`.`pseudo`
--

DROP TABLE IF EXISTS `pseudo`;
CREATE TABLE `pseudo` (
  `IDPseudo` int(10) unsigned NOT NULL auto_increment,
  `Pseudo` varchar(45),
  `email` varchar(45),
  `nom` varchar(45) ,
  PRIMARY KEY  (`IDPseudo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `test`.`pseudo`
--

/*!40000 ALTER TABLE `pseudo` DISABLE KEYS */;
INSERT INTO `pseudo` (`IDPseudo`,`Pseudo`,`email`,`nom`) VALUES
(1,'PseudoA','pseudoa@example.com','pseudoa'),
(2,'PseudoB','pseudoB@example.com','pseudob');
/*!40000 ALTER TABLE `pseudo` ENABLE KEYS */;


La requête SQL :
Code: Tout sélectionner
SELECT pseudo, count(*) as NBPost
FROM pseudo ps INNER JOIN post po ON ps.IDPseudo = po.IDPseudo
GROUP BY pseudo
ORDER BY NBPost desc;



le résultat :
Code: Tout sélectionner
pseudo   NBPost
PseudoA   3
PseudoB   2


linkadress
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 30 Mar 2006

Message le Sam Avr 29, 2006 6:29

Merci pour vos réponses rapides, et aussi pour ce script qui m'a grandement aidé, j'ai réussi à faire ce que je voulais ;)

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Sam Avr 29, 2006 9:18

Tu auras corrigé de toi même l'erreur grossière qui se cache dans ma requête SQL.

La requête marche mais elle n'est pas du tout optimisée.
Il vaut mieux faire :
GROUP BY IDPseudo => Clé primaire, Int, Champ indexé

plutôt que
GROUP BY Pseudo => Varchar non indexé


linkadress
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 30 Mar 2006

Message le Sam Avr 29, 2006 15:39

Oui , j'ai un peu modifié l'énoncé des tables.
En fait j'ai créé une seconde table donc comme toi valeurpseudo, pour alimenter un champ lienspost qui pourra subir une comparaison....

J'avais perdu facile 1h car j'avais créé un champ lienspost varchar(50) que je tentais de classer alors que c'est mieux qu'en c'est un entier.

J'ai remanié la déclaration de tables, et les fonctions de requête en m'inspirant de ta vision du problème...

Une chose est sûre, j'aurais bien progressé sur Sql.
Je vais voir encore si je peux optimiser les calculs, et anticiper lorsque les bases seront importantes....

Merci, c'est bien cool.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités