2012-05-03 12 views
6

tengo esta consulta -MySQL Query, uniéndose número 2 de la tabla

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 por lo que con el tiempo puede mostrar el nombre de la categoría de una tabla separada llamada categories. Todo lo que puedo mostrar es el categoryID de interests con este sql

Ambas estructuras de la 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 

categorías estructura de la tabla

# 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 una combinación de alguna clase que se necesita, pero me han mirado ejemplos y están luchando para obtener la sintaxis exacta.

tengo esto en un script php - la declaración de eco es este

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

y su salida es esto -

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

Quiero que la salida sea "Adidas fue el más popular en Deporte con 1 ocurrencias "

Sin embargo, mi consulta sql no incluye category_desc.

Respuesta

0

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

Yo no lo he probado. Puede haber errores de sintaxis.

1

Por favor verifique 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 
+0

consigo este error con esto - sintaxis derecho al uso cerca de 'join interno int categorías como gato en int.categoryID = cat.categoryID GRO' en la línea 5 – DIM3NSION

+0

Try reemplazando 'AS int' por' AS ints' y reemplazando todos los demás de 'int' a' ints' también. int podría ser una palabra reservada. –

2

Este es un rendimiento más rápido sabia

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 
0

no sé en qué escenarios realistas las dos consultas similares a los que posteaste tiene sentido. Yo diría que se puede ir con esta recta:

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