0

我有两个 MYSQL 表“shirts_in_box”、“trousers_in_box”,它们代表可以在同一个盒子里的两类不同的对象:衬衫和裤子,以及每个盒子的数量。

表“shirts_in_box”有列“shirt_id, quantity”,而“trousers_in_box”有列“trouser_id, quantity”

我必须处理以下情况:

1) 我从 box_id = "foo" 中的两个项目开始:例如表 "shirts_to_box" 有一行

shirt_id = 'xxx', quantity : '1'

并且“trousers_to_box”有一排

trouser_id = 'www', quantity : '2'

2) 提交了 box_id = 'foo' 的项目更新列表,如下所示

trousers_to_box :

box_id : foo, trousers_id : 'aaa', quantity : '5'

shirts_to_box :

box_id : foo, shirts_id : 'xxx', quantity : '2'

3)我应该接受这个并更新“shirts_to_box”,“trousers_to_box”,以便上面是两个表中具有box_id ='foo'的所有条目,即

shirts_to_box :

UPDATE shirt_id = 'xxx', quantity : '1' to quantity = 2

trousers_to_box :

ADD trouser_id = 'aaa', quantity : '5'
DELETE trouser_id = 'www', quantity : '2'

目前,我的方法不是很有效。我对两个单独的表进行了两个单独的查询,并分别对每个表进行了添加/更新/删除。

有没有办法在一个查询中完成这一切?或者甚至比我目前所拥有的更有效的方法?

4

1 回答 1

1

您可以使用一个通用表item_in_box所有项目都有不同的 id(裤子和衬衫不能有相同的 id):

-----------------------------------------------
 BOX_ID  |  ITEM_ID  |  ITEM_TYPE  |  QUANTITY
-----------------------------------------------
 foo     |  xxx      |  shirt      |  1
 foo     |  www      |  trouser    |  2
-----------------------------------------------

然后,当您获得该foo框的更新时,您只需要使用这种请求:

UPDATE item_to_box
SET `quantity` = CASE `item_id`
    WHEN xxx THEN 5
    WHEN yyy THEN 2
END

新列item_type不会在您的更新中使用,但有助于区分您的项目。

编辑

为了完全概括您的代码,这是我向您提出的建议: 在此处输入图像描述

保留您的表格shirtand trouser,但使用中间 : item。无论您拥有多少项目类型(与我在上面写的相同),您现在都将有一个 UPDATE 请求要做。

注意:该item.type列是可选的,您可以使用它快速知道一个项目的类型,而无需查询所有子表(trousershirt...)

于 2013-08-23T14:56:36.500 回答