Помогите перенести данные из одного поля в Mysql в другой

Тема в разделе "Базы данных", создана пользователем студент, 31 авг 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    Добрый день.
    У меня в БД в таблице {pref}_news есть 2 поля: top_news и imp. Мне нужно удалить поле top_news, а его данные перенести в поле imp.
    Сначала я подумал, что чем переносить данные (что я не умею делать) я просто удалил поле imp, а далее поменял название и структуру поля top_news в imp (в phpmyadmin справа от названия поля нажал на Изменить, поменял название и в enum сделал '0','1'). Но все данные поля исчезли.
    Как мне перенести данные поля top_news в поле imp, чтобы при этом не удалялись данные поля?
    Вторая проблема в том, что структура полей тоже отличается. Имею в виду enum('yes','no') и enum('0','1').

    `top_news` enum('yes','no') NOT NULL DEFAULT 'no',
    `imp` enum('0','1') NOT NULL DEFAULT '0',

    Мне нужно чтобы все данные из поля top_news перенеслись в поле imp, но с enum('0','1').
    Помоги пожалуйста.
     
  2. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    UPDATE my_table a
    JOIN my_table b ON a.id = b.id
    SET a.imp = IF ( b.top_news = 'yes', 1, 0 );

    ALTER TABLE my_table DROP top_news;

    id - какое-нибудь уникальное поле.. auto_increment, например..
     
    Последнее редактирование: 31 авг 2013
    Шумадан нравится это.
  3. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    Спасибо за быстрый ответ. Сделал запрос. Поле imp приняло вид
    `imp` enum('yes','no') NOT NULL DEFAULT '0',
    и естественно все новости встали по дефолту (тоесть с 0). А мне нужно, чтобы поле imp не меняло свою структуру, а новости в которых указано:
    top_news yes
    было
    imp 1
    ____________

    top_news no
    было
    imp 0

    ===============
    только что увидел Ваш второй ответ. Его еще не пробовал. Попробую отпишусь.
     
  4. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    отредактировал.. каюсь, сразу в вопрос не вкурил, прочитал по диагонали..

    зы.. дропать поле - на ваше усмотрение..
     
  5. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    залил базу из бекапа и снова сделал запрос:

    UPDATE 055_news a
    JOIN 055_news b ON a.28 = b.27
    SET a.imp = IF ( b.top_news = 'yes', 1, 0 );
    ALTER TABLE 055_news DROP top_news;

    вышла ошибка:

    SQL-запрос:

    UPDATE 055_news a JOIN 055_news b ON a.28 = b.27 SET a.imp = IF( b.top_news = 'yes', 1, 0 ) ;

    Ответ MySQL: [​IMG]

    #1054 - Unknown column 'a.28' in 'on clause'

    у меня id поля top_news 27, а поля imp 28
     
  6. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    структуру таблицы приведите..

    зы.. ваш скриншот не открывается.. cpanel не пускает.. ))

    а зачем это: ON a.28 = b.27 ?.. субд сама свяжет.. при этом id будут одинаковы..

    тогда уж WHERE a.id = 28


    > у меня id поля top_news 27, а поля imp 28
    гм.. это не параллельный перенос?..
     
    Последнее редактирование: 31 авг 2013
  7. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    [​IMG]

    [​IMG]
     
    Последнее редактирование: 31 авг 2013
  8. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    я так понял, что id нужно указывать.
    Вы пожалуйста напишите точный запрос (каким он должен быть), так как мне немного трудно понять то на что менять.
     
  9. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    так он тут https://www.nulled.cc/threads/244240/#post-2166516 ..

    зы.. ох.. схему таблицы вы так и не привели.. может удаленку в личку кинете.. сам всё быстро сделаю..
     
  10. студент

    студент

    Регистр.:
    3 фев 2009
    Сообщения:
    157
    Симпатии:
    1
    а картинка которую я привел это не структура? Вы скажите где ее взять и я приведу.
    Я сделал запрос:

    UPDATE 055_news a
    JOIN 055_news b ON a.id = b.id
    SET a.imp = IF ( b.top_news = 'yes', 1, 0 );
    ALTER TABLE 055_news DROP top_news;

    вышла ошибка:

    SQL-запрос:

    UPDATE 055_news a JOIN 055_news b ON a.id = b.id SET a.imp = IF( b.top_news = 'yes', 1, 0 ) ;

    Ответ MySQL: Документация
    #1054 - Unknown column 'a.id' in 'on clause'

    доступ дать не проблема, но дело в том, что я сейчас учусь менять данные полей. Мне на днях нужно будет обновлять сайт и я готовлюсь к этому. Поэтому мне нужно самому научиться сделать все.
     
Статус темы:
Закрыта.