Как всегда, когда самому что то нужно - ответа готового не найти. Понадобилась массовое обновление цен на сайте, а товаров не мало 920. Поднять цены на 10%. Поле где хранится цена типа STRING, а некоторые цены имеют дробную часть отделенную запятой :) Т.е. если умножать - запятая не будет воспринята. Да и еще некоторые цены записаны с пробелом, например "20 340" - если это на что то умножить результат тоже будет не верным. Цель была такая:
- Заменить все запятые в поле (столбике) одной таблицы MySQL по заданному двойному условию на точки
- Убрать все пробелы по тому же условию
- Перемножить все это на 1.1
- Округлить до двух чисел после запятой
Отображаем нужные нам поля, по заданному одному условию
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/ - главное разбивайте ваши команды на много строк - тогда будет понятнее где ошибка.