Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Копирование данных из одной таблицы в другую


Автор: Sl@va 5.4.2010, 12:04
Здравствуйте !
Нужно перенести часть данный из одной таблицы в другую. Структура обоих таблиц идентична. Перенести данные нудно не все сразу, а по одной записи за раз из таблицы POST в таблицу POST2 и только те записи, у которых поле 
'date` < '2008-01-01 11:37:38' 
Ни как не могу составить правильно SQL запрос.

SELECT * FROM `POST` WHERE `date` < '2008-01-01 11:37:38' LIMIT 0 , 1;
запрос выборки данных.

Нашел что нужно использовать INSERT INTO для вставки данных из одной таблицы в другую. Но вот как все правильно это написать ...

Автор: DimW 5.4.2010, 12:30
Цитата(Sl@va @  5.4.2010,  12:04 Найти цитируемый пост)
а по одной записи за раз 

почему это так принципиально?

Добавлено через 1 минуту и 39 секунд
если это не так важно то:
Код

insert into `post2`
(SELECT * FROM `POST` WHERE `date` < '2008-01-01 11:37:38' );

Автор: Sl@va 5.4.2010, 15:23
Просто скрипт будет запускаться на сервере через CRON каждые 30 секунд, чтобы не ощущалась нагрузка.

Автор: DimW 5.4.2010, 15:40
в таком случае:
Код

insert into post2
(select *
   from (select *
           from post
          where date < '2008-01-01 11:37:38'
         minus
         select *
           from post2) 
 limit 0,1);


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

но учтите, я этого не предлогал, вы сами захотели  smile 

Автор: azesmcar 5.4.2010, 15:42
Цитата(DimW @  5.4.2010,  15:40 Найти цитируемый пост)
но учтите, я этого не предлогал, вы сами захотели  smile  

 smile
Цитата(Sl@va @  5.4.2010,  15:23 Найти цитируемый пост)
Просто скрипт будет запускаться на сервере через CRON каждые 30 секунд, чтобы не ощущалась нагрузка. 

выглядит как-то подозрительно...копирование таблицы каждые 30 секунд...можно поинтересоваться зачем?

Автор: DimW 5.4.2010, 15:44
Цитата(azesmcar @  5.4.2010,  15:42 Найти цитируемый пост)
можно поинтересоваться зачем?

для того, что бы растянуть удовольствие smile

Автор: azesmcar 5.4.2010, 15:45
Цитата(DimW @  5.4.2010,  15:44 Найти цитируемый пост)
для того, что бы растянуть удовольствие smile 

тоже мне удовольствие smile 

Автор: DimW 5.4.2010, 15:53
Цитата(azesmcar @  5.4.2010,  15:45 Найти цитируемый пост)
тоже мне удовольствие smile  


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

Автор: Akina 5.4.2010, 16:48
Если, копируя раз в 30 секунд по ОДНОЙ записи (2880 в сутки, порядка миллиона в год), реально дождаться переноса ВСЕХ записей - то нефиг валять дурака, переноси все записи сразу. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)