Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   MySQL UPDATE одним запросом если в записи есть разделитель (https://javascript.ru/forum/server/66622-mysql-update-odnim-zaprosom-esli-v-zapisi-est-razdelitel.html)

zawm 28.12.2016 03:41

MySQL UPDATE одним запросом если в записи есть разделитель
 
Здравствуйте!

Существует ли возможность UPDATE без начального SELECT если поле содержит разделитель? Т.е. запись в таблице имеет вид "XXX|YYYY", мне надо к YYY прибавить новое значение, при этом ХХХ не трогая.


Пример. Было "777|0.123" Надо к 0.123 добавить новое значение переменной $new (пусть будет 1), чтобы получилось "777|1.123"

Есть ли возможность это сделать UPDATE одним запросом? Спасибо.

laimas 28.12.2016 09:43

Цитата:

Сообщение от zawm
Т.е. запись в таблице имеет вид "XXX|YYYY"

Кто вас надоумил хранить данные в таком формате? Читайте о нормализации и приведите представление данных в базе к человеческому, ибо использовать REGEXP для поиска, выборки по условию и обновления будет слишком накладно.

zawm 28.12.2016 11:04

Да такой тип данных хранится во всех базах наших сайтов изначально. Используется редко поэтому и через разделитель, чтобы не занимать 2 ячейки таблицы.

Наверное зря я спросил. Просто сейчас дописываю модуль и решил ради интереса найти решение одним запросом. Экономии мало конечно, учитывая что данный запрос редкий. Просто интересно стало - как это можно реализовать.

laimas 28.12.2016 12:20

Можно, если очень редко, длина строкового значения фиксирована и это одна запись:

'UPDATE table SET field = INSERT(field, 5, 5, SUBSTRING(field, 5)+'.$add.')'


Когда думают, что "через разделитель, чтобы не занимать 2 ячейки таблицы", это экономно, круто, тогда и попадают в самые неприятные ситуации. В MySQL нет реализации замены по рег. выражению, есть только поиск по нему.

zawm 28.12.2016 18:57

Цитата:

Сообщение от laimas (Сообщение 439140)
Можно, если очень редко, длина строкового значения фиксирована и это одна запись:

'UPDATE table SET field = INSERT(field, 5, 5, SUBSTRING(field, 5)+'.$add.')'


Когда думают, что "через разделитель, чтобы не занимать 2 ячейки таблицы", это экономно, круто, тогда и попадают в самые неприятные ситуации. В MySQL нет реализации замены по рег. выражению, есть только поиск по нему.

Не - не фиксирована. Это может быть любым числом, как целым так и дробным:)

laimas 28.12.2016 19:05

Цитата:

Сообщение от zawm
Это может быть любым числом, как целым так и дробным

И в чем смысл такого "выигрыша" запихнуть строкой в одно поле?

Значит получайте как две подстроки до и после разделителя, соединяя затем после модификации второй.


Часовой пояс GMT +3, время: 04:38.