COUNT + DISTINCT dans MySQL Query signle

  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Mar 12, 2007
  • Messages: 6228
  • Loc: South-Africa
  • Status: Offline

Message Décembre 6th, 2010, 2:09 am

Salut à tous, J'ai le tableau suivant (simplifié pour référence):

MYSQL Code: [ Select ]
CREATE TABLE `search`(
`id` INT(11) NOT NULL PRIMARY KEY REFERENCES `data`(`id`),
`term` VARCHAR(255) NOT NULL,
INDEX(`id`)
)ENGINE=MyISAM;
  1. CREATE TABLE `search`(
  2. `id` INT(11) NOT NULL PRIMARY KEY REFERENCES `data`(`id`),
  3. `term` VARCHAR(255) NOT NULL,
  4. INDEX(`id`)
  5. )ENGINE=MyISAM;


permet de dire que j'ai les valeurs suivantes dans il:

MYSQL Code: [ Select ]
INSERT INTO `search` VALUES(1,'RT');
INSERT INTO `search` VALUES(2,'Joe');
INSERT INTO `search` VALUES(3,'RT');
INSERT INTO `search` VALUES(4,'Joe');
INSERT INTO `search` VALUES(5,'Bill');
  1. INSERT INTO `search` VALUES(1,'RT');
  2. INSERT INTO `search` VALUES(2,'Joe');
  3. INSERT INTO `search` VALUES(3,'RT');
  4. INSERT INTO `search` VALUES(4,'Joe');
  5. INSERT INTO `search` VALUES(5,'Bill');


Je suis à la recherche pour une requête simple qui retourne les termes de recherche distincts et aussi combien de fois chaque termes distincts vient dans le tableau, comme suit:

RT | 2
Joe | 2
Le projet de loi | 1

Donc, fondamentalement, comme à Id Comines deux requêtes:

MYSQL Code: [ Select ]
SELECT DISTINCT(`term`) FROM `search`
JOIN `data` ON `search`.`id`=`data`.`id`
WHERE `data`.`status` != 'D';
  1. SELECT DISTINCT(`term`) FROM `search`
  2. JOIN `data` ON `search`.`id`=`data`.`id`
  3. WHERE `data`.`status` != 'D';

ET
MYSQL Code: [ Select ]
SELECT COUNT(`search`.`id`) FROM `search`
JOIN `data` ON `search`.`id`=`data.`id`
WHERE `data`.`status` != 'D'
AND `search`.`term`='RT';
  1. SELECT COUNT(`search`.`id`) FROM `search`
  2. JOIN `data` ON `search`.`id`=`data.`id`
  3. WHERE `data`.`status` != 'D'
  4. AND `search`.`term`='RT';
Let's leave all our *plum* where it is and go live in the jungle ...
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Décembre 6th, 2010, 2:09 am

  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Mar 12, 2007
  • Messages: 6228
  • Loc: South-Africa
  • Status: Offline

Message Décembre 6th, 2010, 2:46 am

Bon, j'ai trouvé ma réponse, a été assez simple en fait. voici le code:

MYSQL Code: [ Select ]
SELECT `term`, COUNT(`term`)
FROM `search`
GROUP BY `term`
  1. SELECT `term`, COUNT(`term`)
  2. FROM `search`
  3. GROUP BY `term`
Let's leave all our *plum* where it is and go live in the jungle ...
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Décembre 6th, 2010, 8:37 am

Je me souviens d'un article publié par l'optimisation MySQL MySQL sur le site lui-même qui dit DISTINCT et GROUP BY sont généralement liés et que vous devriez essayer d'utiliser GROUP BY en faveur de DISTINCT chaque fois que vous le pouvez.
Strong with this one, the sudo is.

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 235 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC