0

我有 2 张桌子。
电影
- id (PK)
- 标题
- 类型

剧集
- id (PK)
- 剧集 (PK)
- 标题

每部电影都有一些剧集。

电影

---------------------------------
| id | title       | type       |
|----|-------------|------------|
| 1  | movie1      | 3 episodes |
| 2  | movie2      | 2 episodes |
---------------------------------


插曲

----------------------------------------
| id | episode     | title             |
|----|-------------|-------------------|
| 1  | 1           | movie1 episode 1  |
| 1  | 2           | movie1 episode 2  |
| 1  | 3           | movie1 episode 3  |
| 2  | 1           | movie2 episode 1  |
| 2  | 2           | movie2 episode 2  |
----------------------------------------


如果我更新记录 id="1" (在两个表上),我经常使用:
电影

Update Movie set title='...', type='...' where id=1;

剧集

Delete from Episode where id=1;
Insert into Episode(id, episode, title) values('...', '...', '...');

我认为更新 Table Episode 是一种愚蠢的方式。我只是想不出另一种更新记录的方法,考虑到用户可能会更改、添加或删除表上的某些记录,然后将所有更改保存到数据库。

有人有其他解决方案吗?

编辑:

前任。用户对 Table Episode (just id=1)
Episode进行了一些更改

----------------------------------------
| id | episode     | title             |
|----|-------------|-------------------|
| 1  | 1           | movie1 episode 1  |
| 1  | 2           | movie1 episode 1a |
| 1  | 3           | movie1 episode 2  |
| 1  | 4           | movie1 episode 3a |
| 1  | 5           | movie1 episode 3b |
----------------------------------------

如何将所有更改存储到数据库?

4

2 回答 2

0

我认为这个查询可以解决你的问题:

update Movie m inner join Episode e on m.id = e.id and m.id = 1 set m.title = 'your_value', e.title = 'your value'

数据库:MYSQL 5.5

于 2012-12-15T08:54:24.570 回答
0

我建议稍微改变一下你的表结构,然后你就不需要所有的更新了。

即 Movie.Type 可以通过在剧集(按电影 ID)上执行 SELECT COUNT(*) 来计算。我不明白为什么需要存储 Movie.Type,并且 Episode.Title 也可以计算,您只需将 Episode Title 存储在 Episode 表中,而不是 Movie Title + Episode Title。这样,您可以只计算查询中的标题,而不是存储冗余数据,然后担心如何更新它。

于 2012-12-15T09:03:48.747 回答