#php #mysql
#php #mysql
Вопрос:
У меня есть таблицы tow, в которых есть записи, которые нужно удалить одновременно.
Например:
таблица user_files
user_id file_id[CHAR]
1 F1
1 F2
1 F4
2 F3
2 F4
таблица files
file_id
F1
F2
F3
F4
И я хочу, чтобы delete records
из files
и user_files
которого только один пользователь взял это.Другими словами.
Если бы только один пользователь получил этот файл, например:
в user_files
есть tow user 1 and 2
и только file F1 and F2 and F3
были взяты одним пользователем.И я хочу delete the records base on user_id
1 F1
1 F2
from the user_files
and
F1
F2
from the files will be delete at the same time.
То, как я сделал :
SELECT @file_id:=file_id AS file_id,COUNT(file_id) AS cfi FROM `user_files` AS UF
WHERE file_id IN (SELECT file_id FROM `user_files` WHERE user_id = 1)
GROUP BY file_id
HAVING cfi = 1;
DELETE `user_files`,`files` FROM `user_files`,`files`
WHERE user_files.file_id= files.file_id AND user_files.`file_id` IN(@file_id);
Проблема с SQL-запросом заключалась в удалении только последней записи.Я имею в виду, что из обеих таблиц был удален variable @file_id
полученный multi-file_id
, но только последний file_id_id.
И я сделал это таким образом [ передайте file_id в variable @file_id
], я хотел передать записи, которые нужно удалить, обратно пользователю, чтобы отобразить, какие записи были удалены.
Большое вам спасибо за любое предложение!
Ответ №1:
Насколько я понимаю вашу проблему, вы хотите удалить две записи одновременно из двух таблиц, на которые ссылаются с одинаковыми user_id
сначала измените свой механизм обработки таблиц на InnoDB
, а затем примените ограничение внешнего ключа, подобное этому
ALTER TABLE `files` ADD FOREIGN KEY ( `file_id` ) REFERENCES `user_files` (
`file_id`
) ON DELETE CASCADE ON UPDATE CASCADE ;
теперь, если вы удалите любой файл из первой таблицы, то имя этого файла будет автоматически удалено из второй таблицы.
надеюсь, это вам поможет. 🙂