MySQL переконвертировть валюту

Тема в разделе "Базы данных", создана пользователем 01K, 7 янв 2015.

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

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    271
    Симпатии:
    40
    Всем привет!
    Есть успешно работающий проект, в базе данных(MySQL) которого накопилось приличное количество важной информации. Среди этой информации есть поля с ценой, представленные структурой:
    float(7,2) и float(8,4)

    Появилась задача все цены поменять на другую валюту, т.е. каждое значение нужно поделить на коэффициент вида: z.xxxxx: a/z.xxxxx= b.hh (новая валюта с двумя знаками после запятой).

    Вопрос, как правильно и каким запросом это сделать?
    В итоге нужно получить новые цены с двумя знаками после запятой и в одной из таблиц float(8,4) поменять на float(8,2)
     
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.723
    Симпатии:
    2.097
    1. определить список таблиц - где нужны изменения
    2. в каждой такой таблице, для тренировки, создать поле float(8,2)
    3. использовать UPDATE вкупе с ROUND чтоб присвоит значение этому полю
    4. сравнить результаты и всё ли нормально

    по простому же, сделать все поля 8,4 произвести операции и потом сделать 8,2, зная по тесту, что ничего не потеряется
     
    01K нравится это.
  3. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    271
    Симпатии:
    40
    Т.е. можно смело юзать такой код, заменив SELECT на UPDATE?
    Код:
    SELECT ROUND(`price1` / 3.45280, 2) AS new_price FROM book_data;
    Это для проверки селектил
     
  4. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.718
    Симпатии:
    5.693
    Код:
    ALTER TABLE `your_table` CHANGE `price` `price` float(8,2) NOT NULL;
     
  5. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.723
    Симпатии:
    2.097
    просто добавьте новое поле типа new_price и для своей проверки попробуйте
    Код:
    UPDATE `book_data` SET `new_price` = ROUND(`price1` / 3.45280, 2)
    так как, насколько я понимаю, вы не совсем уверены в результате и достаточности знаний, то селайте бекап базы перед этим, чтоб потом не мучаться после неудачных апдейтов. можно будет восстановить первоначальное состояние без каких либо трудностей
     
    01K нравится это.
  6. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    271
    Симпатии:
    40
    С ALTER не сталкивался, вместо второго `price` должно быть примерно так?
    Код:
    ALTER TABLE `your_table` CHANGE `price` ROUND(`price1` / 3.45280, 2) float(8,2) NOT NULL;
    
    Или тут вложенным запросом надо?

    P.S. Получается, что с вариантом от Шумадан останется и старая валюта, что хорошо для истории платежей :)
     
  7. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.723
    Симпатии:
    2.097
    ALTER меняет структуру таблички, почитайте немного документацию, чтоб немного знаний приобрести. проведите несколько тестов, а потом уже работайте по "боевому"
     
    01K нравится это.
Статус темы:
Закрыта.