我有两个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'
目前,我的方法效率不高。我在两个单独的表上进行了两次单独的查询,并分别对每个表进行添加/更新/删除。
有没有办法在一个查询中完成所有操作?或者甚至比我现在得到的更有效的方式?
答案 0 :(得分: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
未在您的更新中使用,但有助于区分您的商品。
修改强>
为了完全概括您的代码,我建议您这样做:
保留您的表格shirt
和trouser
,但请使用中间人:item
。你现在只需要一个UPDATE请求,无论你有多少项目类型(我在上面写的那个)。
注意:item.type
列是可选的,您可以使用它来快速了解项目的类型,而无需查询所有子表(trouser
,shirt
.. 。)