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。表示できるのは、この sqlのcategoryIDfromだけですinterests

どちらのテーブル構造も

#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スクリプトにあります-エコーステートメントはこれです

"{$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"

出力を「スポーツで最も人気があったのは Adidas で、出現回数は 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 * FROM interests i LEFT JOIN categories c ON i.categoryID = c.categoryID

私はそれをテストしていません。構文エラーがある可能性があります。

于 2012-05-03T06:28:14.347 に答える
0

あなたが投稿した2つの同様のクエリがどのような現実的なシナリオで意味があるのか​​ わかりません。私はあなたがこれですぐに行くことができると言います:

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 に答える