Consulta MYSQL, uniendo el problema de 2 tablas

tengo esta consulta -

SELECT interest_desc, categoryID, MAX(num_in_cat) AS num_in_cat 
FROM
(
   SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat
   FROM interests
   GROUP BY interest_desc, categoryID
 ) subsel 
 GROUP BY interest_desc, categoryID

Quiero cambiarlo para que eventualmente pueda mostrar el nombre de la categoría de una tabla separada llamada categories. Todo lo que puedo mostrar es el categoryID del interests con este sql

Ambas estructuras de tabla son

#interests

CREATE TABLE `interests` (
 `interestID` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) NOT NULL,
 `categoryID` int(11) NOT NULL,
 `sessionID` int(11) NOT NULL,
 `interest_desc` varchar(30) NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`interestID`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8   

estructura de la tabla de categorías

# categories
CREATE TABLE `categories` (
 `categoryID` int(11) NOT NULL AUTO_INCREMENT,
 `category_desc` varchar(100) NOT NULL,
 PRIMARY KEY (`categoryID`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

Sé que se necesita una combinación de algún tipo, pero he mirado ejemplos y estoy luchando para obtener la sintaxis exacta.

Tengo esto en un script php: la declaración de eco es esta

"{$result['interest_desc']} was the most popular in category   {$result['categoryID']}    with {$result['num_in_cat']} occurrences\n";

y su salida es esta -

"Adidas was the most popular in category 5 with 1 occurrences"

Quiero que el resultado sea "Adidas fue el más popular en el deporte con 1 aparición"

Sin embargo, mi consulta sql no aparece category_desc.

preguntado el 03 de mayo de 12 a las 07:05

4 Respuestas

Esto es más rápido en cuanto a rendimiento.

SELECT subsel.interest_desc, subsel.categoryID, cat.category_desc, MAX(num_in_cat) AS num_in_cat 
    FROM
    (
       SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat
       FROM interests
       GROUP BY interest_desc, categoryID
     ) subsel 
     inner join categories as cat on subsel.categoryID = cat.categoryID
     GROUP BY interest_desc, subsel.categoryID

contestado el 26 de mayo de 17 a las 20:05

Compruebe amablemente esto, le dará el resultado requerido.

SELECT subsel.interest_desc, cat.category_desc, MAX(num_in_cat) AS num_in_cat 
FROM
(
   SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat
   FROM interests
   GROUP BY interest_desc, categoryID
 ) subsel 
 inner join categories as cat on subsel.categoryID = cat.categoryID
 GROUP BY interest_desc, subsel.categoryID

contestado el 03 de mayo de 12 a las 09:05

Recibo este error con esto: sintaxis correcta para usar cerca de 'categorías de combinación internas int como cat en int.categoryID = cat.categoryID GRO' en la línea 5 - DIMENSIÓN

Intenta reemplazar AS int a AS ints y reemplazar todos los demás de int a ints así como. int podría ser una palabra reservada. - robin castillo

SELECT * FROM interests i LEFT JOIN categories c ON i.categoryID = c.categoryID

no lo he probado Puede haber errores de sintaxis.

contestado el 03 de mayo de 12 a las 07:05

No sé en qué escenarios realistas tienen sentido las dos consultas similares que publicaste. Yo diría que puedes ir con esto de inmediato:

SELECT     i.interest_desc, c.category_desc, COUNT(i.categoryID) AS num_in_cat
FROM       interests AS i
INNER JOIN categories AS c USING (categoryID)
GROUP BY   i.interest_desc, i.categoryID

contestado el 03 de mayo de 12 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.