我有三个具有多对多关系的表。表格很简单:电影、标签和电影标签(定义如下)。我希望用户能够看到最受欢迎的标签。这是工作查询:
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;