CUENTA + DISTINCT en signle consulta MySql

  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de Usuario
  • Registrado: Mar 12, 2007
  • Mensajes: 6228
  • Loc: South-Africa
  • Status: Offline

Nota Diciembre 6th, 2010, 2:09 am

Hola a todos, tengo el siguiente cuadro (simplificado de referencia):

MYSQL Código: [ 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;


permite decir que tengo los siguientes valores en que:

MYSQL Código: [ 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');


Estoy buscando una única consulta que devolverá los términos de búsqueda distinta y también cuántas veces cada uno trata de términos distintos en la tabla, como la siguiente:

RT | 2
Joe | 2
Bill | 1

Así que, básicamente identificación tiene gusto de comino dos consultas:

MYSQL Código: [ 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';

Y
MYSQL Código: [ 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
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Diciembre 6th, 2010, 2:09 am

  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de Usuario
  • Registrado: Mar 12, 2007
  • Mensajes: 6228
  • Loc: South-Africa
  • Status: Offline

Nota Diciembre 6th, 2010, 2:46 am

Bueno, he encontrado mi respuesta, era bastante simple en realidad. Heres el código:

MYSQL Código: [ 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
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Diciembre 6th, 2010, 8:37 am

Me parece recordar un artículo de la optimización de MySQL publicado por el sitio de MySQL mismo que dice DISTINCT y GROUP BY suelen estar relacionados y que usted debe tratar de usar GROUP BY en favor de DISTINCT siempre que pueda.
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 124 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC