За последние 24 часа нас посетили 56806 программистов и 1788 роботов. Сейчас ищут 1737 программистов ...

Как скопировать запись?

Тема в разделе "MySQL", создана пользователем Zilog, 25 дек 2010.

  1. Zilog

    Zilog Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    14
    Симпатии:
    1
    Как скопировать запись?

    структура:
    id | feild1 | feild2 | feild3 | feild..NN

    нужно создать в той же(!) таблице копию записи.

    такой вариант не катит (ругается на ключ)
    [sql]INSERT INTO pages SELECT * FROM pages WHERE pageID = '.$pageID[/sql]

    Как бы это сделать, не перебирая все поля руками?
     
  2. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
    два запроса, сначала SELECT и сохранить результаты куда-нить. Потом INSERT эти результаты.

    зы: обрати внимание на Primary Key, такие поля должны быть уникальны.
     
  3. Zilog

    Zilog Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    14
    Симпатии:
    1
    нет, спасибо, будем откровенны — это через жопу.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    новая запись всё равно не будет копией старой. Так как Primary Key - уникальное поле (как уже выше сказали)

    Быстрее всего будет открыть в phpmyadmin, выделить строку, вставить в запрос и добавить запятые. секунд 30 делов-то
     
  5. Zilog

    Zilog Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    14
    Симпатии:
    1
    дада, так и надо.

    да, отличный вариант. КТо-то нажмёт кнопку в админке, мне уйдёт письмо на мыло "юзер такой-то, живущий в таком-то городе нажал кнопку А, исходные данные Б, по этому бросай нахер все дела и лезь в phpmyadmin". Так что ли? :D
     
  6. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
    посмотри в сторону ON DUPLICATE KEY UPDATE, это принципиально всё в один зарос пихать?
     
  7. Zilog

    Zilog Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    14
    Симпатии:
    1
    1. смотрел, он на ключ ругается. а без него никак (в скопированной записи, разумеется, он должен быть на 1 больше).

    2. Нет, не принципиально - хоть в 10, лишь бы поля не перечислять в коде.
     
  8. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
    Попробуй так:
    [sql]INSERT INTO pages SELECT * FROM pages WHERE pageID = '.$pageID.' ON DUPLICATE KEY UPDATE pageID=LAST_INSERT_ID(pageID)+1[/sql]

    при условии, что pageID - это автоинкриментное значение.
     
  9. Zilog

    Zilog Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    14
    Симпатии:
    1
    Код (Text):
    1. Column 'pageID' in field list is ambiguous
    то же самое...
     
  10. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Столбец 'pageID' в cписке полей неоднозначен

    Мой рабочий вариант, но список полей, кроме pageID, придется указать

    [sql]INSERT INTO pages(title)
    SELECT title FROM pages WHERE pageID = 1[/sql]
     
  11. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Zilog
    Во-первых, не нужно иронии, подробности твоей задачи мне неизвестны, решаю ту, что описана:
    Во вторых, подобная ошибка
    говорит о том, что надо указывать таблицы, например

    INSERT INTO pages AS p1 SELECT * FROM pages AS p2 WHERE p1.pageID = '.$pageID.' ON DUPLICATE KEY UPDATE p2.pageID=LAST_INSERT_ID(p1.pageID)+1[/quote]
     
  12. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
  13. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
    чтобы не перебирать руками, используй функции php для получения списка полей
    и далее составление запроса тоже на php.