Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2012, 17:23
Кандидат Javascript-наук
Отправить личное сообщение для posta Посмотреть профиль Найти все сообщения от posta
 
Регистрация: 27.08.2010
Сообщений: 115

Присвоение записи в таблице Mysql
Подскажите, существует ли такая возможность:
Есть две таблицы идентичные. Надо взять запись (одну или несколько) и скопировать в другую таблицу, а из первой удалить.
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2012, 18:25
Кандидат Javascript-наук
Отправить личное сообщение для nyols Посмотреть профиль Найти все сообщения от nyols
 
Регистрация: 16.02.2011
Сообщений: 134

INSERT INTO
   `tbl` (`filed`, `other_field`)
SELECT
   `some_field`,
   `second_field`
FROM
   `other_tbl`

А вот удалить уже придется отдельным запросом помоему
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2012, 00:41
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

ну по сути здесь 2 более-менее нормальных варианта:
1. Написать огромный запрос в котором будет выполняться транзакция, содержащая все необходимые операции. Но здесь есть подводные камни, например далеко не все мускульные драйверы смогут корректно обработать ответ, да и скорость выполнения такого запроса будет невелика.
2. Создать хранимую процедуру(системный объект БД) которая в качестве параметра будет принимать идентификатор, записи в 1-й таблице, производить необходимые операции и отдавать результат своей работы. скорость выполнения транзакции будет несравнимо выше, поскольку мускль будет юзать свой собственный системный объект (хранимую процедуру), которая будет кэшироваться после первого запуска (по дефолту).
Вот пример:
DELIMITER //
create procedure `MyDB`.`myproc` (  --  здесь MyDB - имя БД, myproc - имя процедуры
    IN `id` int
)
begin
    declare flag int;
    set flag = (select `a` from `table1` where `a` = `id`);
    -- здесь проверяем существует ли в таблице table1 нужная запись
    -- если существует, тогда производим все операции и отдаем идентификатор добавленной записи
    if flag is not null then
    begin
        insert into `table2` (`d`, `e`, `f`) -- d, e, f - имена полей в таблице table2
        select `a`, `b`, `c` from `table1` where `a` = `id`; -- a, b, c - имена полей в таблице table1
        delete from `table1` where `a` = `id`;
        select `d` from `table2` where `d` = `id`;
    end;
    -- в противном случае отдаем "error: there is no record in the table" (для примера),
    -- дабы затем сказать клиенту об ошибке (не обязательно)
    else
        select "error: there is no record in the table";
    end if;
end //


Далее эту процедуру можно вызывать один или несколько раз (в цикле) в зависимости от количества записей, которые нужно скопировать из table1 в table2.
call myproc(1) -- вызов процедуры myproc с параметром id равным 1
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2012, 03:33
Кандидат Javascript-наук
Отправить личное сообщение для posta Посмотреть профиль Найти все сообщения от posta
 
Регистрация: 27.08.2010
Сообщений: 115

nekto_O,
блин, это сложно... спасибо за ответ. буду над этим разбираться...
Ответить с цитированием
  #5 (permalink)  
Старый 19.02.2012, 09:51
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от posta
блин, это сложно...
Ничего сложного здесь на самом деле нет и в помине. Разобравшись 1 раз с логикой создания сущностей(вьюх, хранимок, триггеров и т.д.), вы, во-первых, избавляете себя от лишних строк кода в скрипте, будь то java, С#, php и др. Во-вторых, обеспечиваете оптимальную скорость обработки запроса, объединив всю логику в одну транзакцию.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать размер ячейки в таблице не больше определённого значения? javascript_pupil (X)HTML/CSS 16 18.02.2012 12:52
Перемешать данные в таблице greatilya Оффтопик 8 18.05.2011 17:50
Изменение цвета ячейки в таблице, при наведении на строку другой таблицы Psychosonic Общие вопросы Javascript 12 24.11.2010 16:44
Как установить кодировку при записи в MySQL Arfey Общие вопросы Javascript 6 14.06.2010 18:00
Разварачивание строк в таблице на jQyery Suharik jQuery 49 07.05.2010 11:20