据我所知,mysql中没有集合,列表,字符串或数组。我想构建一个具有两个核心组件的系统,有关游戏匹配的信息,然后是匹配中播放的角色列表。如果在mysql中有列表,那么我会做这样的事情:
game_id INT,
characters list<varchar>,
....more data
我希望能够做的基本查询是这样的:
SELECT * FROM games WHERE characters IN LIST(list);
我可以选择只有一个字符,或者我可以指定10个字符。问题是如何在mysql中有效地使用10 WHERE
子句与OR
。字符也没有具体的排序......但我想我可以根据他们的ID来订购它们。
我想到的唯一方法是创建第一个包含基本信息的表,第二个表只包含字符ID和game_id。
任何人都有一个关于如何使用我可能不知道的一些奇特的mysql技巧很好地组织这些数据的建议?查询也需要很快,因为最终可能会有很多查询。除非我添加一个视图/下载计数器,否则它将比读取更多的读取....我猜它会比读取更多的写入/更新。
谢谢,我很乐意再提供信息。
答案 0 :(得分:2)
如果我能正确理解你的问题,我可以想到两种方式......
方法1 ...添加一个看起来像...... {/ p>的game_characters
表
CREATE TABLE `games_characters` (
`game_id` int(11) DEFAULT NULL,
`character_id` int(11) DEFAULT NULL,
KEY `games` (`game_id`),
KEY `characters` (`character_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
...然后查询就像......
SELECT *
FROM `games` as g
LEFT JOIN `games_characters` as gc
ON (g.`id` = gc.`game_id`)
WHERE gc.`character_id` IN (12,52,86,23)
方法2 ...使用LIKE,不太适合大型数据库,但避免使用额外的表... characters
记录将包含来自另一个表的一堆ID { {1}},由像这样的句号“.23.51.252.75.93。”分隔。查询看起来像
characters
您的CMS必须解析并重建字符串。