php - 如何在一个删除查询中使用多个表名 - 并非所有表都有数据
问题描述
我需要的
我有一个名为 dbtuts 的数据库,它总共有 7 个表。
表名是 tbl_uploads、variationtable1、variationtable2、variationtable3、variationtable4、variationtable5、variationtable6。
所有这些表都有一个名为 的列prjId
。
我想从 tbl_uploads 表和从 varianttable1 到 varianttable6 中删除一行,其中 prjId 可以说是 xxxx 。
但问题是variationtable1 到variationtable6 可能有也可能没有prjId 列的这个xxxx 数据。
如果有这样的数据,有什么方法可以让我执行一个删除 xxxx 的查询。
我的代码
我尝试按照以下方式进行操作,但它不起作用。
$deleteQuery = "
DELETE
FROM dbtuts.tbl_uploads
, dbtuts.variationtable1
, dbtuts.variationtable2
, dbtuts.variationtable3
, dbtuts.variationtable4
, dbtuts.variationtable5
, dbtuts.variationtable6
WHERE prjId = 'xxxx'
";
$resultDeleteQuery = mysqli_query($conn,$deleteQuery);
有人有什么想法吗?
解决方案
您可以使用单个查询来完成LEFT JOIN
:
DELETE t, v1, v2, v3, v4, v5, v6
FROM dbtuts.tbl_uploads t
LEFT JOIN dbtuts.variationtable1 v1 ON t.prjId = v1.prjId
LEFT JOIN dbtuts.variationtable2 v2 ON t.prjId = v2.prjId
LEFT JOIN dbtuts.variationtable3 v3 ON t.prjId = v3.prjId
LEFT JOIN dbtuts.variationtable4 v4 ON t.prjId = v4.prjId
LEFT JOIN dbtuts.variationtable5 v5 ON t.prjId = v5.prjId
LEFT JOIN dbtuts.variationtable6 v6 ON t.prjId = v6.prjId
WHERE t.prjId = 'xxxx'
注意:如果您的数据库模式设计正确,则不需要这种查询。实现这种功能的正确方法是在每个dbtuts.variationtablex
表中使用ON CASCADE DELETE
.
推荐阅读
- angular - 反应形式:模式验证在子组件中不起作用
- python - Python:时间序列数据的三次样条回归
- php - MySQL 查询 GROUP 在控制台中工作,在 PHP 脚本中不起作用
- python-3.x - 在opencv python中合并blob的任何方式
- javascript - 如何使用每个按钮的事件克隆块(行,按钮)?
- c# - 当 Nest 进入 Google Assistant 时,我如何使用我自己的 C# 应用程序,使用 Firebase,来获取和设置 Nest 的温度状态
- wordpress - 每次提交后如何在联系表格7中重置谷歌recaptcha
- powershell - 如何将变量从一个 If 语句传递到 Powershell 中的另一个 If 语句?
- android - 在本机反应中使用 Amazon SNS 服务以编程方式发送 SMS?
- react-native - 链接 react-native-imagepicker 时出错