MySQL - работающие запросы: UPDATE, SELECT c WHERE AND, REPLACE и FORMAT

Как всегда, когда самому что то нужно - ответа готового не найти. Понадобилась массовое обновление цен на сайте, а товаров не мало 920. Поднять цены на 10%. Поле где хранится цена типа STRING, а некоторые цены имеют дробную часть отделенную запятой :) Т.е. если умножать - запятая не будет воспринята. Да и еще некоторые цены записаны с пробелом, например "20 340" - если это на что то умножить результат тоже будет не верным. Цель была такая:

  1. Заменить все запятые в поле (столбике) одной таблицы MySQL по заданному двойному условию на точки
  2. Убрать все пробелы по тому же условию
  3. Перемножить все это на 1.1
  4. Округлить до двух чисел после запятой

Отображаем нужные нам поля, по заданному одному условию

SELECT * FROM `var_contentvalues` WHERE tmplvarid in (10);

т.е. показать "все" поля (столбики) из таблицы var_contentvalues где в столбике tmplvarid значение равно 10. Это нам выведет таблицу var_contentvalues но только те строки, у которых в столбике tmplvarid стоит 10.

Результат этой команды будет выглядеть примерно так

id tmplvarid name value huyalue putinloh
2 10 Vasja 500 bla bla da
67 10 Petja Vatnik 4 000 bla net
9 10 Lena 987,5 bla da

Замена с помощью UPDATE значений в MySQL - запятых на точки по двойному условию WHERE AND

UPDATE `var_contentvalues` 
SET value = REPLACE(value, ',', '.') 
WHERE `tmplvarid` = '10'  
AND 
`value` LIKE '%,%';

Т.е.
1. строка: изменить таблицу var_contentvalues 
2. строка
: заменить значение в столбике value на тот же самый value, но модифицированный с помощью команды RELACE, который заменит запятую ',' на  точку'.'
3. строка: для строк, у которых поле tmplvarid равно 10
4 и 5 строка: и еще в этих строках в столбике value должна присутствовать запятая, окруженная все равно чем (знак %)

Умножаем числа в БД MySQL - по заданному одному условию

UPDATE `var_contentvalues`
SET value = value * 1.1
WHERE `tmplvarid` = '10';

Все строки уже разобрали, кроме 2-й строки, она значит: записать в поле  value значение value только умноженное на 1.1

Только если у вас это цены - нужно будет округлить до сотых.

Умножаем числа в БД MySQL - по заданному одному условию - и округляем до двух значений после запятой

UPDATE `var_contentvalues`
SET value = FORMAT(value * 1.1,2)
WHERE `tmplvarid` = '10';

Все строки уже разобрали, кроме 2-й строки, она значит: записать в поле value значение value умноженное на 1.1 - при этом отформатировав значение до двух знаков после запятой FORMAT(значение/поле/выражение,n-знаков после запятой)

Убираем пробелы в полях БД MySQL - с двумя условиями WHERE AND

UPDATE `var_contentvalues`
SET value = REPLACE(value, '\ ', '')
WHERE `tmplvarid` = '10'
AND
`value` LIKE '%\ %';

Здесь все разбирали кроме того что если вы хотите как либо обозначить ПРОБЕЛ при поиске или замене то нужно перед пробелом поставить "\"

Во всем этом НЕРЕАЛЬНО помогает разбираться - предварительная проверка синтаксиса http://www.piliapp.com/mysql-syntax-check/  - главное разбивайте ваши команды на много строк - тогда будет понятнее где ошибка.


Комментарии:

Другие записи

Установка evoFilter 0.32 07-07-2014

Пришло время испытать новое решение фильтрация на modx Evo, от замечательного разработчика и общественного благодетеля Dmi3yy. Работал с версией

Конструктор Kano научит собирать ПК

Собрать компьютер в скором времени сможет каждый ребенок