Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как скопировать строчку

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Волк
Отправлено: 02 Марта, 2011 - 18:06:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




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

То есть например есть таблица с стобцами id, <столбец 1>, <столбец 2>, ..., <столбец n>
и нужно получить сточку с id=5 (например) и вставить её в конец (но уже с другим id)

Если бы мы занили какие стобцы есть в таблицы то можно было бы просто их пречилсить
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO pers (name, somestring) SELECT name, somestring FROM pers WHERE id=5

Но не зная их когда я делаю вот так
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO pers SELECT * FROM pers WHERE id=5

выдается ошибка, что он не может скопировать id ибо он уникальный
CODE (htmlphp):
скопировать код в буфер обмена
  1. (#1062 - Duplicate entry '2' for key 'PRIMARY')


Подскажите запрос для копирования, спасибо.
(Добавление)
через пхп сделал..


-----
Таран - оружие героев!
 
 Top
movEAX
Отправлено: 02 Марта, 2011 - 21:49:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Хм.. интересно.
Можно наверно так ( сразу говорю, не проверял )
CODE (SQL):
скопировать код в буфер обмена
  1. PREPARE myinsert FROM 'INSERT INTO tablename ( SELECT NULL, ? FROM tablename WHERE id=5 LIMIT 1 )';
  2.  
  3. SET @FIELDS =
  4. ( SELECT GROUP_CONCAT(COLUMN_NAME)
  5.   FROM INFORMATION_SCHEMA.COLUMNS
  6.   WHERE table_name = 'tablename' AND
  7.        table_schema = 'dbname' AND
  8.        COLUMN_NAME != 'id' );
  9.  
  10. EXECUTE myinsert USING @FIELDS;


p.s.: bazinga ;)

(Отредактировано автором: 02 Марта, 2011 - 21:50:21)



-----
армия.. самое убогое место
 
 Top
zardoz
Отправлено: 02 Марта, 2011 - 23:13:06
Post Id


Гость


Покинул форум
Сообщений всего: 100
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Можно через временную таблицу в памяти:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TEMPORARY TABLE tt1 ENGINE=MEMORY AS SELECT * FROM pers WHERE id=5; -- сохраняем нужную запись в памяти
  2. UPDATE tt1 SET id=(SELECT max(id)+1 FROM pers); -- обновляем id нужной записи
  3. INSERT INTO pers SELECT * FROM tt1; -- вставляем запись из врем. таблицы в pers


С уважением.

(Отредактировано автором: 02 Марта, 2011 - 23:22:23)

 
 Top
Волк
Отправлено: 03 Марта, 2011 - 01:27:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Спасибо, но я уже через php сделал


-----
Таран - оружие героев!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB