У меня есть 3 таблицы, сети, узлы, сетевые узлы, сетевые соединения.
Сетевые узлы имеют 3 поля network_node_id, network_id и node_id, последние два являются ссылками на другие ключи сети.и сеть может включать несколько копий одного и того же узла (но с другим идентификатором network_node_id)
networkconnections имеет fileds networkconnection_id, start_network_node_id, end_network_node_id
Теперь я хочу дублировать сетьзапись, это включает в себя создание новой записи сетевой таблицы, создание копий записей в сетевых узлах и сетевых соединениях.
Как это можно сделать с помощью хранимых процедур MySQL?Возможно ли сделать это в одном запросе без использования массивов и цикла for?
DROP PROCEDURE IF EXISTS `DuplicateNetwork`;
CREATE PROCEDURE `DuplicateNetwork`(network_key char(50))
BEGIN
DECLARE newNetworkId BINARY(16);
// Generate a Unique using function
SELECT NewKey() INTO newNetworkId;
// Create a new Network
INSERT INTO networks (network_id,
Label,
AppBackgroundColorKey,
DateAdded,LastModified)
SELECT newNetworkId,
Label,AppBackgroundColorKey,
DateAdded,
NOW(),
FROM networks
WHERE network_id = network_key;
// Copy networknodes reords curresponding to network_key
// Store the ids of newly created recored to an array or some other structure called NN
INSERT INTO networknodes (
network_node_id,
network_id,
node_id,
DateAdded,
LastModified)
SELECT NewKey(), // Need to dtore this value in NN
newNetworkId,
node_id,
DateAdded,
NOW()
FROM networknodes
WHERE network_id = network_key;
// Copy networkconnections reords curresponding to network_key
// This part is incorrect, i don't know how two make it, help is needed here
INSERT INTO networkconnections(networkconnection_id,
start_network_node_id,
end_network_node_id,
DateAdded)
SELECT NewKey(),
(SELECT NWN_start.network_node_id ...),
(SELECT NWN_end.network_node_id ...),
FROM networkconnection
INNER JOIN networknodes AS NWN_start ON networkconnection.start_network_node_id=NWN_start.network_node_id
INNER JOIN networknodes AS NWN_end ON networkconnection.end_network_node_id =NWN_end.network_node_id
//WHERE NWN_start.networl_id = network_key;
// For each room network connection
replace the old networknode_id with new networknode_id for both start and end nodes
END;
Было бы здорово Любое тело может улучшить / завершить Алгоритм