1

私はこのmysqlコードを持っており、データベースに表示される回数によって各カテゴリで最も人気のある説明を取得します-

それはリストをつかみます、しかしそれはこのようにデータをエコーアウトします

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

この興味(趣味)のための私のテーブル構造は

 # 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

これは私のSQLコマンドです:

SELECT 
   interest_desc, 
   categoryID, 
   MAX(num_in_cat) AS num_in_cat,
   category_name
FROM
(
   SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat
   FROM interests
   GROUP BY interest_desc, categoryID
) subsel
JOIN categories ON subsel.categoryID = categories.ID 
GROUP BY interest_desc, categoryID, category_name

このエラーが発生しました:

一意ではないテーブル/エイリアス:'カテゴリ'

4

2 に答える 2

1

これを完了するために必要なのは、テーブルに対する内部結合categories(正しいテーブル名と列名を指定する)だけです。

SELECT 
  interest_desc, 
  categoryID, 
  MAX(num_in_cat) AS num_in_cat,
  category_name
FROM
(
   SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat
   FROM interests
   GROUP BY interest_desc, categoryID
) subsel
JOIN categories ON subsel.categoryID = categories.ID 
GROUP BY interest_desc, categoryID, category_name
于 2012-05-01T01:32:26.073 に答える
0

これらを試してください:

  1. それが機能する場合はより最適に、参加します

    SELECT s.interest_desc, c.name, MAX(s.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 ) s INNER JOIN categories c ON c.ID = s.categoryID GROUP BY s.interest_desc, s.categoryID

    また

  2. 列として別の選択を追加するのは最適ではありません

    SELECT s.interest_desc, (SELECT name from categories c WHERE c.ID = s.categoryID), MAX(s.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 ) s GROUP BY s.interest_desc, s.categoryID

于 2012-05-01T01:32:11.860 に答える