Можно ли вставить значения из одной таблицы в другую и обновить значения полей в том же запросе? - PullRequest
3 голосов
/ 15 ноября 2010

У меня есть две таблицы. Одна таблица должна служить историей транзакций, а другая - журналом сведений об участниках. Когда отчет запускается, я хочу переместить части сведений об элементе в историю транзакций, но ТАКЖЕ обновлять некоторые записи полей, которые иначе не существовали бы.

Можно ли выбрать все записи, которые соответствуют определенным критериям, вставить только части соответствующей строки в другую таблицу И обновить другие поля в одном запросе?

Например:

В таблице 2 у меня есть имя участника, дата регистрации и memberid. Я хочу переместить вышеупомянутые записи в таблицу 1, но также обновить поле (статус), равное «обработано».

Примечание: я также использую php и pdo для подключения к базе данных mysql.

Возможно ли это в рамках одного запроса?

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

После долгих размышлений - я решил воспользоваться советом ircmaxell и просто выполнить несколько запросов. В конечном итоге это не только облегчает задачу, но и позволяет намного проще настроить сортировку.

Как он сказал выше: «Не попадитесь в ловушку меньшего - всегда лучше»

1 голос
/ 15 ноября 2010

Вы не указали, совпадают ли строки, которые вы хотите обновить, с теми, которые вы вставляете. Я предполагаю, что они:

insert into table1
(member_name, date_registered, memberid, status)
select member_name, date_registered, memberid, 'processed'
from table2
where SomeField = MyCriteria
0 голосов
/ 15 ноября 2010

Да

SELECT *, "processed" INTO table2 FROM table1

Вам придется адаптироваться на основе структур таблиц, возможно, даже выписать все поля:

SELECT field1, field2, field3, "processed" INTO table2 FROM table1

Следует отметить, что предполагается, что вы хотите записать в таблицу 2 , включая обработанную переменную (Могу ли я предложить логическое значение?), Если вы хотите, чтобы "Обработано" в другой таблице, это усложнилось.

Редактировать: Очевидно, MySQL не поддерживает выбор в, так что ...

INSERT INTO table2 SELECT field1, field2, field3, "processed" FROM table1

Код Redfilters работает

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