Апр 28

Во многих веб приложениях необходимо хранить разнообразные настройки. Например, настройки почтовых рассылок в социальных сетях или на форуме. С точки зрения хранения данных одним из распространенных способов является сохранение настроек в поле типа SET. Такой способ удобен для хранения двух состояний каждой настройки (включено/выключено). Но в некоторых случаях нужно сохранять несколько значений. Пример из социальных сетей: настройка приватности “Кто может видеть мой email?” - здесь возможны варианты:

  • все (2)
  • только мои друзья (1)
  • никто (0)

В данном случае настройки можно хранить в виде строки чисел, где каждый символ отвечает за определенный пункт настроек. Например строка “019910” - в ней первый символ отвечает за настройку “Кто может видеть мой email?”. В данном примере первый символ равен “0″, т.е. никто не может видеть email пользователя.

Ну вот, хотел написать об MySQL функции, а получилось вступление по другой теме :-)

Перейдем к примерам работы со строками в MySQL.

MySQL предоставляет целый ряд функций для работы со строками. Для замены символа (или подстроки) используется функция INSERT:

INSERT(str, pos, len, newstr) - возвращает строку str, где подстрока, которая начинается с pos и имеет длину len, заменена строкой newstr

Пример:

SELECT INSERT(’Zend Framework’, 1, 4, ‘Symfony’)

Такой запрос заменяет подстроку “Zend” на “Symfony” и в результате получается “Symfony Framework”.

Очень важно помнить, что в MySQL индексы строк начинаются с 1, а не с 0!

Таким образом, для замены символа в строке (на примере настроек приватности):

UPDATE `users` SET `privacy` = INSERT(`privacy`, 1, 1, ‘2′)

Данным запросом меням настройку приватности для email. Исходная строка принимает значение “219910″ - это значит что email доступен для просмотра всем.

Кажется, пора идти домой уже… :-)