2011-08-20 34 views
1

我有一个游戏的数据库,其中有一个类型字段,里面有逗号分隔的唯一ID。这是一个文本字段。例如:HALO 2 - cat_genre => '1,2' (Action,Sci-Fi)在MySQL中以逗号分隔的文本字段中查找值?

我试图做一个函数来计算该类型的游戏总数。所以它将1值与db中用逗号分隔的多个值相匹配。

我正在使用SELECT * FROM gh_game WHERE cat_genre IN (1)哪个可以找到动作游戏。

我试图解决这个问题,我以为我曾经钉过一次,但我无法弄清楚。

+7

问题是首先缺少db标准化;应该有一个游戏编号和猫编号的流派表,每个编号编号为 – 2011-08-20 05:14:57

+1

而不是使数据库方案复杂化,你可以经常使用FIND_IN_SET() - 尽管这可能会导致性能下降。 – mario

+1

我之前使用过这种方法......但它只能作为单向操作而不会破坏性能和可维护性。既然你试图进行双向查找(查看表格而不是只是查看),Dagon就是正确的,你需要把它分成一个新表格。 –

回答

1

您需要创建多对多关系。像这样

CREATE TABLE gameGenreTable (id int NOT NULL PRIMARY KEY, genreID, gameID) 

编辑:如果你使用的是InnoDB,您还可以创建genreID和游戏ID .. 外键我想补充的genreID唯一键,游戏ID

那么你可以做一个查询这样

SELECT genreID,count(genreID) as count from gameGenreTable GROUP BY genreID; 

- 并加入您的其他表,以获得流派名称(或只使用ID)。

相关问题