多対多の関係を持つ3つのテーブルがあります。テーブルは単純です: ムービー、タグ、ムービータグ (以下の定義)。最も人気のあるタグをユーザーが確認できるようにしたいと考えています。作業クエリは次のとおりです。
SELECT tags.tag, COUNT( * ) AS c, tags.id
FROM tags
LEFT JOIN movietags ON tags.id = tagid
GROUP BY tags.id
ORDER BY c DESC
結果は (tag name, count, tags.id) のようになります
action 450 2
comedy 300 10
drama 280 8
thriller 250 5
etc.
多くのムービーには、多くのタグが割り当てられています。ユーザーが好きなタグを選べるようにしてほしい。たとえば、ユーザーが上記のリストから「アクション」を選択した場合、「アクション」タグを持つ映画の中で最も人気のあるタグを取得する必要があります。結果は以下のようになります - 「アクション」タグが付いた映画のみ:
comedy 120 10
thriller 88 5
western 62 21
drama 41 8
今、エラーなしで WHERE 句を持つように上記のクエリを適応させることはできません。「アクション」カテゴリの映画のみを選択してカウントするにはどうすればよいですか? また、「アクション」、「スリラー」、「コメディ」のタグが付いた映画を、これらのタグが付いた映画の数で並べ替えるなど、より多くのタグからユーザーが選択できるようにしてほしいと思います。
テーブルの定義:
CREATE TABLE `movie` (
`id` int(10) unsigned,
`title` varchar(250),
`tags` varchar(250),
`category` varchar(250),
KEY `id` (`id`)
) ENGINE=MyISAM;
CREATE TABLE `movietags` (
`tagid` int(10) unsigned,
`movieid` int(10) unsigned,
UNIQUE KEY `tagid_2` (`tagid`,`movieid`),
KEY `mainid` (`movieid`),
KEY `tagid` (`tagid`)
) ENGINE=MyISAM;
CREATE TABLE `tags` (
`id` int(10) unsigned auto_increment,
`tag` varchar(250),
PRIMARY KEY (`id`),
UNIQUE KEY `tag` (`tag`)
) ENGINE=MyISAM;