Php 在一个查询中删除多个表中的数据

Php 在一个查询中删除多个表中的数据,php,mysql,join,sql-delete,Php,Mysql,Join,Sql Delete,请问,您能帮助我,如何在一个查询中删除多个表中的数据? 我有以下表格结构: products texts files 产品\u文件-这里是映射到产品的文件-产品\u id,文件\u id 文本文件-这里是映射到文本的文件-文本id,文件id 我需要这样做: 如果我删除id为50的文件,我需要删除文件id=50的产品文件和文本文件中的所有行 你知道怎么做吗 我尝试使用左连接,但没有任何结果 $query = 'DELETE products_files, texts_files FROM pro

请问,您能帮助我,如何在一个查询中删除多个表中的数据? 我有以下表格结构:

products
texts
files
产品\u文件-这里是映射到产品的文件-产品\u id,文件\u id 文本文件-这里是映射到文本的文件-文本id,文件id

我需要这样做: 如果我删除id为50的文件,我需要删除文件id=50的产品文件和文本文件中的所有行

你知道怎么做吗

我尝试使用左连接,但没有任何结果

$query = 'DELETE products_files, texts_files FROM products_files 
                    LEFT JOIN texts_files ON texts_files.file_id = products_files.file_id
                  WHERE products_files.file_id = '.$id.' OR texts_files.file_id = '.$id.'';

您可能需要删除级联功能的
。但是,请小心使用,因为它可能会产生令人惊讶的后果:

如果在
create table
-查询中添加
ON DELETE CASCADE
,则可以从中删除任何项。如果存在任何外键约束,mysql将自动跟踪连接,并删除另一个表中的条目


但是,如果您想安全起见(推荐),您需要使用多个delete语句。

试试这个:

DELETE f1,f2 
FROM products_files f1 
INNER JOIN texts_files f2 ON f1.file_id = f2.file_id
WHERE f1.file_id = '.$id.';

使用MySQL外键约束

您可以通过在
*
前面加上表名来指定要从中删除的表:delete table.*from table 1 JOIN table 2 JOIN。。。哪里WHERE子句指定要删除的行。

基本上,我觉得您的查询很好(除了左连接)-这不起作用

DELETE pf
     , tf 
  FROM products_files pf
  JOIN texts_files tf
    ON tf.file_id = pf.file_id
 WHERE pf.file_id = $id;

因此,如果我想从产品文件和文本文件中删除,我的查询应该是:
delete products\u files.*,text\u files from.*
没错。我刚刚检查了一下,tablename-only语法也做了同样的事情(正如上面段落的回答中所建议的那样),也许这对您有所帮助:在DELETE中,左连接的这个可能的副本是一个奇怪的问题thing@BrianTompsett在那枚考古学徽章之后?@BrianTompsett-汤莱恩 很公平。烧录可以慢一点吗?删除的时候级联是用外键连接的,不是吗?我还没用呢。@JanKožušník是的。如果没有外键,则需要执行多个delete语句。仅用一次删除无法从多个语句中删除项目。谢谢。但是加入表格呢。。。?没有办法?@JanKožušník好吧,忘了我的评论吧。可以从多个表中删除:谢谢。我会试试的