Создать предложение sql с древовидным запросом? SQL - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь создать запрос, который выполняет три предложения, но я думаю, что это невозможно, верхние его два, проблема в том, что у меня есть две таблицы, одна называется current_products, а другая - finished_products, как только продукт завершено данные, которые находятся в таблице current_product, передаются в таблицу finished_products, это будет:

$query = self::connect()->prepare(
            "INSERT INTO `finished_products` 
                    (room, name, lot, quantity_packed, pallet) 
                SELECT room, name, lot, quantity_to_package, finished_pallets 
                FROM `current_products` 
                WHERE `room`=:room
            );
$query->execute(["room"=>$room]);

после передачи, я хочу удалить данные из таблицы current_product, где комната такая же комната, которую я прохожу, что-то вроде этого:

$query = self::connect()->prepare(
            "INSERT INTO `finished_products` 
                    (room, name, lot, quantity_packed, pallet) 
                SELECT room, name, lot, quantity_to_package, finished_pallets 
                FROM `current_products` 
                WHERE `room`=:room; 
            DELETE * FROM `current_products` WHERE `room`=:room;"
        );
$query->execute(["room"=>$room]);

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

CREATE TRIGGER DELETECURRENTPRODUCT_AI AFTER INSERT ON `finished_products` DELETE * FROM `current_products` WHERE room = new.room

, но он всегда говорит мне, что есть ошибка, близкая к DELETE, поэтому я не знаю, как синтаксис, я пробовал много способов, но, похоже, не работает, другие люди говорили мне использовать транзакции, но видя это, это похоже на выполнение двух запросов один за другим один, например:

$query = self::connect()->prepare(
            "INSERT INTO `finished_products` 
                (room, name, lot, quantity_packed, pallet) 
                SELECT room, name, lot, quantity_to_package, finished_pallets 
                FROM `current_products` 
                WHERE `room`=:room);

$query->execute(["room"=>$room]);

$query = self::connect()->prepare("DELETE * FROM `current_products` WHERE `room`=:room);
$query->execute(["room"=>$room]);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...