6

我有这个查询 -

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

我想更改它,以便最终可以从名为categories. 我只能显示categoryID来自interests这个 sql

两个表结构都是

#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   

类别表结构

# 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

我知道需要某种形式的连接,但我查看了示例并且正在努力获得确切的语法。

我在 php 脚本中有这个 - echo 语句是这个

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

它的输出是这样的 -

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

我希望输出是“阿迪达斯是运动中最受欢迎的,出现了 1 次”

但是我的 sql 查询没有功能category_desc

4

4 回答 4

2

这是更快速的性能明智

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
于 2012-05-03T07:26:34.147 回答
1

请检查此,它将为您提供所需的结果。

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
于 2012-05-03T06:30:38.310 回答
0

我不知道您发布的两个类似查询在哪些实际情况下有意义。我会说你可以直接使用这个:

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
于 2012-05-03T16:12:58.813 回答
0

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

我没有测试过。可能存在语法错误。

于 2012-05-03T06:28:14.347 回答