За последние 24 часа нас посетили 23656 программистов и 1717 роботов. Сейчас ищут 1699 программистов ...

Копирование с изменением полей

Тема в разделе "MySQL", создана пользователем Elkaz, 19 мар 2008.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Здравствуйте. Уже не один день бьюсь над одним запросом к БД :)
    Задача
    Скопировать данные из одной записи в другую, полностью, заменив лишь некоторые поля
    Логика
    [sql]
    COPY `entry_1` TO `entry_2` CHANGE (name = 'Admin', password = 'mypass')
    [/sql]

    Есть ли что-нибудь такое? Если нет - как это правильнее всего организовать при помощи insert? Количество полей 50+, заранее их число неизвестно.
     
  2. tmanager

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

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Такие способы есть, и не в единственном числе.

    Я считаю -- правильней всего написать функцию (CREATE FUNCTION)
    и вставить её в запрос:

    [sql]INSERT INTO tablename (`entry_2`) select ИмяФункции(entry_1) AS entry_2[/sql]
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    К сожалению, ничего не нашел
    можно подробнее?
     
  4. tmanager

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

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Сейчас нельзя (ОЧЕНЬ занят -- у меня демонстрация через полчаса). Чтоб зря не ждать -- напишите в коде php логику замен, которые должны произойти.
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Плавится мозг... Где ошибка:
    [sql]
    "INSERT into `".table_weapons."` (wname, wtype, mass, weared, image, price, created,
    owner, count, durability_now, durability_max, damage_min, damage_max, desc, level)
    VALUES ('Кристаллы нова', 8, 0.05, '0', 'res/nova_crystall.jpg', 5, 'Природа', 0, 1, 1, 1, 1, 0, 0,
    'один из первых минералов, которые обнаружили люди на Эльдрине. В данный момент используется для переработки и дальнейшего
    использования в различных отраслях науки и техники', 0);
    [/sql]

    Ошибка
     
  6. Anonymous

    Anonymous Guest

    зарезервированное слово (ORDER BY DESC) в бактики засунь.
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Горбунов Олег
    Гений :)))))) Спасибо)
    Главное в гугле забил 1064-ую ошибку, вижу линку про зарезервированные слова. Думаю не мой случай :D
    З.ы
    А в прошлых запросах я ее засовывал в ``.
    З.ы.ы
    Есть какая-нить тулза для ловли таких ошибок?)
     
  8. Anonymous

    Anonymous Guest

    Мозг. :)
     
  9. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Горбунов Олег
    Расплавлен :)
    Впринципе на свежую голове можно написать свою (для подсчета кавычек, скобочек, запятых и зарезервираванных слов). Но стоит ли изобретать новый велик? :)
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Приехали :)
    Operand should contain 1 column(s)
    [sql]
    INSERT into `".table_weapons."` (wname, wtype, mass, weared, image, price, created,
    need_level, need_power, need_intellect, need_knowleadge, need_health, need_dodge, need_reaction,
    give_power, give_intellect, give_knowleadge, give_health, give_dodge, give_reaction,
    give_mf_destruction, give_mf_accuracy, give_mf_stability, give_mf_breakdown, give_mf_reservation,
    give_hp, give_psy, owner, count, durability_now, durability_max, damage_min, damage_max,
    `desc`, level) SELECT (wname, wtype, mass, 0, image, price, created,
    need_level, need_power, need_intellect, need_knowleadge, need_health, need_dodge, need_reaction,
    give_power, give_intellect, give_knowleadge, give_health, give_dodge, give_reaction,
    give_mf_destruction, give_mf_accuracy, give_mf_stability, give_mf_breakdown, give_mf_reservation,
    give_hp, give_psy, 1, 1, durability_now, durability_max, damage_min, damage_max,
    `desc`, level) FROM `".table_weapons."` WHERE owner = '0' AND wname = 'Кристаллы нова'
    [/sql]
     
  11. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Спасибо Сергею :)
    Проблема решена (при SELECT'e скобки не нужны были)