Приветствую! Буду благодарен общественности, если кто-нибудь кинет в меня ссылкой на пример обработки MySQL-множетсва SET средствами PHP. Долго гуглил и яндексил, но найденной информации - практически ноль. Суть проблемы: Есть поле типа SET в базе сайта знакомств. Назовём это поле - LookingFor. Может принимать несколько значений из следующих: Код (Text): set('CORRESPONDENCE', 'FRIENDSHIP', 'LOVE', 'SEX', 'FLIRT', 'FAMILY', 'ROMANCE', 'SPONSORSHIP', 'COMMUNICATION', 'VACATION', 'LEISURE', 'BEASPONSOR') Пользователь заполнил анкетку на сайте и выбрал несколько из них, например: Код (Text): CORRESPONDENCE, FRIENDSHIP, SEX, FLIRT, VACATION Теперь передо мной стоит задача это дело распарсить и присвоить каждому англоязычному термину русскоязычный вариант написания, то есть: Код (Text): ПЕРЕПИСКА, ДРУЖБА, СЕКС, ФЛИРТ, ПУТЕШЕСТВИЯ Можно было бы, конечно, распарсить строковыми функциями, но это топорно, насколько я думаю. Ведь множество SET присваивает каждому элементу целочисленное значение (1, 2, 4, 8, 16, 32, 64 и т.д.). Вот и хотелось бы обрабатывать через switch...case по числовому значению элемента и присваивать перевод. Или я не прав? Надеюсь, что понятно всё объяснил. Спасибо!
наверное нет. Я например вообще не сталкивался с применением данного типа поля. Потому не очень понятно как это работает... Мысли вслух - а если сделать массив значений, в качестве ключа передавать значение SET Типа echo $item[$key] где $item[1] = 'Дружба' $item[2] = 'Флирт' ... $item[64] = 'путешествия'
Я тоже пока не сталкивался. Хотя, поля ENUM и SET - практически одно и то же, за исключением того, что ENUM позволяет хранить только одно значение из списка (и его не составляет проблем получить программно), а SET - несколько. Поле типа SET, насколько я знаю, хранит в себе число. Всего одно. К примеру, есть у тебя пять элементов в SET-множестве: 'field1', 'field2', 'field3', 'field4', 'field5' Каждому из них при создании записи будет присвоен числовой индекс. Соответственно: 1, 2, 4, 8, 16 Так вот. Если из SET-поля ты получишь значение, например, 13, то можно узнать, что выбраны варианты field1, field3 и field4 (1+4+8=13). Вот такая вот логика... Теперь думаю, как это программно распарсить...
Почему бы не воспользоваться встроенными возможностями. Например: http://www.mysql.ru/docs/mysql-man-5.0- ... tions.html EXPORT_SET BIT_AND
В общем случае набор СЕТ неэффективен, он пришел из времен 80х годов, когда экономили каждый бит при хранении. Это итак понятно. Но если он уже есть и база чужая, то вопрос как вынимать остается.
Да, наверное, с SET-ом я погорячился. Буду убирать, наверное. Осталось только продумать, как грамотно его заменить.