Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [MySQL]скопировать поля одной записи в другую запись


Автор: maxipub 9.8.2011, 16:05
уважаемые, как лучше скопировать содержимое одного рядка в другой?
предположим, у нас есть некая таблица, с уникальным id, как содержание рядка с id = 123 сделать таким же, как и у рядка с id = 777 ?

и еще такой подвопрос, а можно сделать все то же самое, только с исключением определенного, указанного списка колонок (т.е. их значения не копировать)

Автор: CruorVult 9.8.2011, 16:39
банально select+insert/update

просто копировать 
Код

insert into table_name select * from table_name where id=777

Автор: maxipub 9.8.2011, 16:48
CruorVult, благодарю, но, во-первых, необходимо не вставить новый рядок, а обновить существующий. Во-вторых, id - уникальный.

Автор: CruorVult 9.8.2011, 21:06
обычным запросом врятли получится. Нужно вытянуть селектом нужную запись и потом построить нужный апдейт запрос

Автор: Akina 10.8.2011, 08:14
Цитата(maxipub @  9.8.2011,  17:48 Найти цитируемый пост)
необходимо не вставить новый рядок, а обновить существующий

удалить сущствующий, скопировать нужный с соотв. изменением ID.

Автор: LordZeus 23.8.2011, 11:28
Извиняюсь, но почему у меня не работает этот код  !?

Код

insert into t_goods
(`kod_p`,`type_good`,`kod_fab`,`color`,`cena_z`,`cena_pro`,`id_curr`,`id_shop`)
 select `t_goods`.`kod_p`, `t_goods`.`kod_fab`, `t_goods`.`color`, `t_goods`.`cena_z`, 
`t_goods`.`cena_pro`, `t_goods`.`id_curr`, `t_goods`.`id_shop` from t_goods where id=14


Выдает данную ошибку

Код

Column count doesn't match value count at row 1

Автор: Akina 23.8.2011, 11:36
LordZeus, Если Вы неспособны самостоятельно перевести сообщение - попросите это сделать любой онлайновый переводчик.

Автор: LordZeus 23.8.2011, 11:43
Akina, ВО Я  ТУПАНУЛ  smile.... пересчитывал 5 раз..и только сейчас недосчитался одной записи. 

Автор: Akina 23.8.2011, 11:49
 smile 
Не пишите всё в строку, лучше вот так
Код

insert into t_goods
(
 `kod_p`,
 `type_good`,
 `kod_fab`,
 `color`,
 `cena_z`,
 `cena_pro`,
 `id_curr`,
 `id_shop`
)
select
 `t_goods`.`kod_p`,
 `t_goods`.`kod_fab`,
 `t_goods`.`color`,
 `t_goods`.`cena_z`, 
 `t_goods`.`cena_pro`,
 `t_goods`.`id_curr`,
 `t_goods`.`id_shop` 
from t_goods 
where id=14
И понятнее, и считать проще, и комментарии есть куда добавить, буде надо...

Автор: rodnover 23.8.2011, 11:58
http://dev.mysql.com/doc/refman/5.0/en/replace.html

Вот такое? обновляет все существующие id, добавляет отсутствующие.

Код

REPLACE INTO `table1`(id, field)
select `table2`.id, `table2`.field
from `table2`

Автор: Zloxa 23.8.2011, 12:04
Цитата(Akina @  23.8.2011,  11:49 Найти цитируемый пост)
 лучше вот так


Запятые, ИМХО лучше в начале строки ставить. Это поначалу кажется не логичным, пока ездиишь в реьсах грамаматики человеческого языка.

Но на деле.. 

Во первых, если строка всегда начинается с лексической конструцкии (не идентификатора), это намного проще парсить глазками. Правда намного лучше это видно при переносе выражений....  Намного легче читать, когда операторы (сложения всякие, конткатенации)  находятся в начале строки и ты понимаешь что это не новое выражение а продложение старого. Тоже  и с функцией. Когда видишь запятую в начале, сразу понимаешь, что это еще перечисление параметров, а не вызов новой процедуры - и скобки считать не надо.

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

В третьих, на практике куда чаще возникает необходимость закоментировать последний элемент списка(или же несколько последних) нежели первый, ставим -- в начале строки и не надо идти на строку в верх, чтобы убрать запятую.

А из недостатков - лишь легкий разрыв шаблонов в попервое.

Автор: LordZeus 23.8.2011, 13:03
Да ... тут целое обоснование концепции расстановки логических разделителей! =))

к стати я тот код так вывел потому, что сильно затупил и в запаре (ихмо чувство пустяковости задачи не покидало меня), и чувствуя беспричинную злость на свой комп и всех, кто причастен к разработке SQL  - выложил код как он был в результате моих манипуляций...

а так в коде у меня все выглядит так..
Код

INSERT INTO 
              `consist_partia`
            (
              `id_good`,
              `id_consist`,
              `procent`
            ) 
            (SELECT 
              '.$id_doc.',
              `id_consist`,
              `procent`
            from `consist_partia` where `consist_partia`.`id_good`='.$obj.');


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

Автор: Akina 23.8.2011, 13:22
Цитата(Zloxa @  23.8.2011,  13:04 Найти цитируемый пост)
Запятые, ИМХО лучше в начале строки ставить. Это поначалу кажется не логичным, пока ездиишь в реьсах грамаматики человеческого языка.

Ну можно вообще довести до абсурда и ставить запятые в отдельных строках smile не, насчёт того, что в начале они удобнее - согласен, сам так делаю, но вот форматировать так чужой код муторно...

Автор: rodnover 23.8.2011, 13:41
Смысл ставить имеет. Хотя, я неделю не мог привыкнуть к такому оформлению. А ставить запятые на отдельных строчках тоже минус вместо одной строчки две придется комментировать.

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