我有三張關係很多的表格。表格很簡單:電影,標籤和電影標籤(下面的定義)。我希望用戶能夠看到最受歡迎的標籤。這裏的工作查詢:從多人到多人的關係中選擇人氣排序的標籤
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
所以結果是像(標籤名稱,計數,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;
你什麼錯誤? –
#1064 - 您的SQL語法錯誤;查詢對應於您的MySQL服務器版本的手冊,以找到在WHERE tags.id = 5 附近使用的正確語法。查詢是:SELECT tags.tag,COUNT(*)AS c,tags.id FROM tags LEFT JOIN movietags ON tags.id =標籤識別 GROUP BY tags.id ORDER用C DESC WHERE tags.id = 5 – Tonyo2k