gpt4 book ai didi

mysql - 多个 MYSQL 语句合二为一

转载 作者:行者123 更新时间:2023-11-29 05:57:50 24 4
gpt4 key购买 nike

我有一个地方 ('place') 可以放置一些盒子 ('box')。在每个盒子里,我都可以有元素('item')。我也可以把元素放在盒子外面的地方。我想删除一个地方,然后删除这个地方的每个盒子,包括每个盒子里的项目以及这个地方但在任何盒子外面的项目。我使用以下单独的语句得到了它:

1:选择地点

SELECT placeid, placename 
FROM place
WHERE userid = (SELECT id
FROM user
WHERE username = 'username' AND password ='password')
AND placename = 'placename'

2:选中那个地方的方框

SELECT boxid, boxname 
FROM box
WHERE placeid = 'id'

3a:对于每个盒子,删除里面的元素

DELETE FROM item 
WHERE boxid = 'boxid'

3b: 然后删除框

DELETE FROM box 
WHERE id = 'boxid'

4:删除不在盒子里的地方的元素

DELETE FROM item 
WHERE placeid = 'placeid' AND boxid = 0

5:删除地方

DELETE FROM place 
WHERE id = placeid

这是可行的,但当然速度很慢。错误管理也不是很好用。

有没有一种方法可以用更少甚至只用一个 SQL 语句来完成这一切?

我当然遇到了关于在一个语句中删除一个框的相同问题!

编辑:mysql 与 php

非常感谢。

最佳答案

你应该尝试ON DELETE CASCADE,它看起来像这样:

ALTER TABLE box ADD CONSTRAINT fk_box_place_id 
FOREIGN KEY (placeid)
REFERENCES place(id)
ON DELETE CASCADE;

ALTER TABLE item ADD CONSTRAINT fk_item_place_id
FOREIGN KEY (placeid)
REFERENCES place(id)
ON DELETE CASCADE;

我认为您不需要任何其他级联,因为 placeid 在所有表格中都可用,并且将涵盖盒内和盒外的项目,但也许我忽略了一些东西。

设置完成后,您只需删除要删除的位置,其余的都为您处理:

DELETE 
FROM place
WHERE placeID = 'deletedPlaceID';

关于mysql - 多个 MYSQL 语句合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com