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

时间:2014-12-21 20:08:01

标签: php mysql join sql-delete

拜托,您能帮助我,如何在一个查询中删除多个表中的数据? 我有这个表结构:

products
texts
files

products_files - 这里是映射到产品的文件 - product_id,file_id texts_files - 这里是映射文件到文本 - text_id,file_id

我需要这样做: 如果我删除id为50的文件,我需要删除products_files和texts_files中的所有行,其中file_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.'';

4 个答案:

答案 0 :(得分:0)

您可能需要ON DELETE CASCADE个功能。但是,请小心使用它,因为它可能会产生令人惊讶的后果:

http://www.mysqltutorial.org/mysql-on-delete-cascade/

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

如果你想保持安全(推荐),你需要使用多个删除声明。

答案 1 :(得分:0)

试试这个:

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外键约束
MySQL foreign key constraints, cascade delete

答案 2 :(得分:0)

您可以通过在*前加上表名来指定要删除的表:DELETE表。* FROM table1 JOIN table2 JOIN ... WHERE ... WHERE子句指定要删除的行。 / p>

答案 3 :(得分:0)

基本上你的查询对我来说似乎很好(LEFT JOIN除外) - 这不起作用......

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