2012-05-01 18 views
1

私は、彼らがデータベースに表示された回数によって、各カテゴリーの中で最も人気のある記述を取得し、このMySQLのコードを持っている -テーブル/エイリアスは一意ではありません: 'categories'。

それはつかむこの

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

私のようなデータから、しかし、それエコーのリストです

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 
:この利益(趣味)のためのテーブル構造は

# 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コマンドであります

このエラーを受けたイム - テーブル/エイリアス固有のものではありません: 'カテゴリ'

おかげで、

DIM3NSION

+3

1.テーブル構造を示す必要があります。 2.この質問は、PHPの代わりにあなたのSQLクエリにのみ焦点を合わせるべきです(PHPの部分は問題ありません) – Raptor

+0

私は私のテーブル構造を知っています。私はcategoryID、一次どのように私は2番目のテーブルを含むようにSQLクエリを編集すると、私のSQLクエリは、categoryIDを持つ最初のテーブルにのみ焦点を当てている – DIM3NSION

答えて

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 
+0

ちょうどあなたの答えの仕事をしようとすると、私はこのmysqlのエラーを取得 - ユニークなテーブル/エイリアス: 「カテゴリ」。私はSQLでデザイナーを介してテーブルをリンクしています。問題は何でしょうか? – DIM3NSION

+0

@ DIM3NSIONテーブルの実際の名前は何ですか? 'categories'でない場合は、上記の正しい名前を指定してください。また、私は 'ON'節に間違ったコンマがあることを知りました.-' subsel、categoryID'は 'subsel.categoryID'でなければなりません。 –

+0

私のテーブルはカテゴリと呼ばれます:私はあなたのアップデートで編集しました。 – DIM3NSION

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

    OR

  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

関連する問題