Удалить данные из нескольких таблиц в одном запросе

Пожалуйста, не могли бы вы помочь мне, как удалить данные из более чем 1 таблицы всего за один запрос?
У меня есть эта структура таблиц:

products
texts
files

products_files — здесь отображаются файлы для продуктов — product_id, file_id
текстовые_файлы — здесь сопоставляются файлы с текстами — text_id, file_id

И мне нужно сделать это:
Если я удаляю файл с идентификатором 50, мне нужно удалить все строки из products_files и text_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.'';

1

Решение

Вам может понадобиться ON DELETE CASCADE функциональность. Однако используйте его осторожно, так как это может привести к неожиданным последствиям:

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

Если вы добавите ON DELETE CASCADE в вашем create table-вопрос, вы можете удалить любой элемент из него. Если есть какие-либо ограничения внешнего ключа, mysql автоматически следует за соединением и также удаляет записи в другой таблице.

Если вы хотите остаться на безопасной стороне (рекомендуется), вам нужно будет использовать несколько операторов удаления.

0

Другие решения

Вы можете указать, из какой таблицы удалить, добавив префикс * с именем таблицы: DELETE table. * FROM table1 JOIN table2 JOIN … WHERE … Предложение WHERE указывает, какие строки следует удалить.

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, каскадное удаление

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;
0
По вопросам рекламы [email protected]