За последние 24 часа нас посетил 32961 программист и 1756 роботов. Сейчас ищут 853 программиста ...

Обработка множества SET

Тема в разделе "PHP и базы данных", создана пользователем SkyKiller, 26 дек 2010.

  1. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Приветствую!
    Буду благодарен общественности, если кто-нибудь кинет в меня ссылкой на пример обработки MySQL-множетсва SET средствами PHP.
    Долго гуглил и яндексил, но найденной информации - практически ноль.
    Суть проблемы:
    Есть поле типа SET в базе сайта знакомств. Назовём это поле - LookingFor. Может принимать несколько значений из следующих:
    Код (Text):
    1. set('CORRESPONDENCE', 'FRIENDSHIP', 'LOVE', 'SEX', 'FLIRT', 'FAMILY', 'ROMANCE', 'SPONSORSHIP', 'COMMUNICATION', 'VACATION', 'LEISURE', 'BEASPONSOR')
    Пользователь заполнил анкетку на сайте и выбрал несколько из них, например:
    Код (Text):
    1. CORRESPONDENCE, FRIENDSHIP, SEX, FLIRT, VACATION
    Теперь передо мной стоит задача это дело распарсить и присвоить каждому англоязычному термину русскоязычный вариант написания, то есть:
    Код (Text):
    1. ПЕРЕПИСКА, ДРУЖБА, СЕКС, ФЛИРТ, ПУТЕШЕСТВИЯ
    Можно было бы, конечно, распарсить строковыми функциями, но это топорно, насколько я думаю. Ведь множество SET присваивает каждому элементу целочисленное значение (1, 2, 4, 8, 16, 32, 64 и т.д.). Вот и хотелось бы обрабатывать через switch...case по числовому значению элемента и присваивать перевод.
    Или я не прав?
    Надеюсь, что понятно всё объяснил.

    Спасибо!
     
  2. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Что - никто не сталкивался?
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    наверное нет.
    Я например вообще не сталкивался с применением данного типа поля.
    Потому не очень понятно как это работает...

    Мысли вслух - а если сделать массив значений, в качестве ключа передавать значение SET
    Типа echo $item[$key]

    где $item[1] = 'Дружба'
    $item[2] = 'Флирт'
    ...
    $item[64] = 'путешествия'
     
  4. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Я тоже пока не сталкивался. Хотя, поля 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).

    Вот такая вот логика... Теперь думаю, как это программно распарсить...
     
  5. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
  6. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    В общем случае набор СЕТ неэффективен, он пришел из времен 80х годов, когда экономили каждый бит при хранении.
    Это итак понятно. Но если он уже есть и база чужая, то вопрос как вынимать остается.
     
  8. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Да, наверное, с SET-ом я погорячился. Буду убирать, наверное. Осталось только продумать, как грамотно его заменить.