Способ извлечь группу записей, которые хотят удалить из мультитаблицы, и передать обратно в PHP в MySQL?

#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 ;
  

теперь, если вы удалите любой файл из первой таблицы, то имя этого файла будет автоматически удалено из второй таблицы.

надеюсь, это вам поможет. 🙂