0

我知道一点 sql 但对这项任务还不够,这就是为什么标题问题看起来有点奇怪的原因。=P

我有一些像下面这样的表(很多数据被剥夺了空间)

**Consoles**
id          INT
console     VARCHAR 

**Games**
id          INT
console_id  INT
game        VARCHAR

**Categories**
id          INT
category    VARCHAR

**Categories_Games**
id          INT
category_id INT
game_id     INT

Categories_Games作为连接表。

现在,我手动将系统类别添加到控制台的所有注册游戏中。在我开始为另一个控制台重复任务的繁琐工作之前,我需要知道的是:有没有办法将注册的类别从一个控制台复制到另一个游戏相同的控制台?

很可能这是可能的,但我无法弄清楚。

编辑。澄清。

我已经注册了所有游戏。(例如,我有 ps3 的“街头霸王 4”和 Xbox 的“街头霸王 4”。

我有与一个控制台(ps3)相关的所有游戏的类别。

如果游戏名称相同,我希望所有 Xbox 游戏都具有相同的 ps3 游戏类别。

4

3 回答 3

1

为了完全避免这种情况,我建议您也通过另一个“连接表”Consoles_Games 在您的游戏和控制台之间创建多对多关系。这样您就可以对每个游戏进行一次分类,然后在提到的 Consoles_Games 表中存储您为哪些游戏机拥有的游戏。

于 2012-09-04T21:08:36.920 回答
1

在您的模型中,类别与游戏相关,而不是与游戏机相关。游戏与游戏机有关。您想将游戏从一台主机复制到另一台主机吗?假设 id 是 AUTO_INCREMENT,并且你想将 xbox 游戏复制到 wii 游戏,试试这个:

insert into consoles(console) values('wii');

insert into games(console_id,game)
select wii.id,g.game
from games g
join consoles x
on x.console_id = g.console_id
join consoles wii
on wii.console = 'wii'
where x.console = 'xbox';

根据您的说明,请执行以下操作:

insert into categories_games(category_id,game_id)
select cg.category_id,other_game.game_id
from games ps3_game
join console ps3
  on ps3.console = 'ps3'
  and ps3.console_id = ps3_game.console_id 
join categories_games cg
  on cg.game_id = ps3_game.game_id
join games other_game 
  on  other_game.game = ps3_game.game
  and other_game.console_id <> ps3_game.console_id;
于 2012-09-04T21:12:12.907 回答
0

当然只是这样做:

INSERT INTO categories_games
SELECT [INTEGER GAME ID YOU WISH TO ADD], category_id FROM categories_games WHERE game_id = [INTEGER GAME ID OF GAME YOU WISH TO COPY]
于 2012-09-04T21:07:31.027 回答