Во многих веб приложениях необходимо хранить разнообразные настройки. Например, настройки почтовых рассылок в социальных сетях или на форуме. С точки зрения хранения данных одним из распространенных способов является сохранение настроек в поле типа 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 доступен для просмотра всем.
Кажется, пора идти домой уже… :-)
Апрель 29th, 2009 at 12:42 пп
Девелоперы издеваются, ну почему бы не сделать начало отсчета индекса с нуля, а не с единицы?
Апрель 29th, 2009 at 1:30 пп
Что есть то есть :)