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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


linkadress
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 156
Inscription: Jeu Mar 30, 2006 18:47

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 passionné
WRInaute passionné
 
Messages: 642
Inscription: Lun Aoû 22, 2005 14:49

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 accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Ven Avr 28, 2006 15:09

... group by posteur


linkadress
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 156
Inscription: Jeu Mar 30, 2006 18:47

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 passionné
WRInaute passionné
 
Messages: 642
Inscription: Lun Aoû 22, 2005 14:49

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 accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

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 occasionnel
WRInaute occasionnel
 
Messages: 156
Inscription: Jeu Mar 30, 2006 18:47

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 accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

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 occasionnel
WRInaute occasionnel
 
Messages: 156
Inscription: Jeu Mar 30, 2006 18:47

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.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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