在mysql中正确组织数据

时间:2013-01-23 04:04:45

标签: mysql

据我所知,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技巧很好地组织这些数据的建议?查询也需要很快,因为最终可能会有很多查询。除非我添加一个视图/下载计数器,否则它将比读取更多的读取....我猜它会比读取更多的写入/更新。

谢谢,我很乐意再提供信息。

1 个答案:

答案 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必须解析并重建字符串。