Реклама на сайте Advertise with us

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

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Опытный плюсополучатель

С нами с 09.06.05
Сообщения: 8305
Рейтинг: 186

Ссылка на сообщениеДобавлено: 26/12/10 в 04:08       Ответить с цитатойцитата 

Приветствую!
Буду благодарен общественности, если кто-нибудь кинет в меня ссылкой на пример обработки MySQL-множетсва SET средствами PHP.
Долго гуглил и яндексил, но найденной информации - практически ноль.
Суть проблемы:
Есть поле типа SET в базе сайта знакомств. Назовём это поле - LookingFor. Может принимать одновременно несколько значений из следующих:
Код:
set('CORRESPONDENCE', 'FRIENDSHIP', 'LOVE', 'SEX', 'FLIRT', 'FAMILY', 'ROMANCE', 'SPONSORSHIP', 'COMMUNICATION', 'VACATION', 'LEISURE', 'BEASPONSOR')

Пользователь заполнил анкетку на сайте и выбрал несколько из них, например:
Код:
CORRESPONDENCE, FRIENDSHIP, SEX, FLIRT, VACATION

Теперь передо мной стоит задача это дело распарсить и присвоить каждому англоязычному термину русскоязычный вариант написания, то есть:
Код:
Код:
ПЕРЕПИСКА, ДРУЖБА, СЕКС, ФЛИРТ, ПУТЕШЕСТВИЯ

Можно было бы, конечно, распарсить строковыми функциями, но это топорно, насколько я думаю. Ведь множество SET присваивает каждому элементу целочисленное значение (1, 2, 4, 8, 16, 32, 64 и т.д.). Вот и хотелось бы обрабатывать через switch...case по числовому значению элемента и присваивать перевод.
Или я не прав?
Надеюсь, что понятно всё объяснил.

Спасибо!

-1
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 26/12/10 в 15:33       Ответить с цитатойцитата 

Не еби себе моск SET'ами, они от лукавого. Сделай отдельную таблицу LookingFor с возможными значениями, две колонки: PK и Value, свяжи две таблицы через Many-to-Many, к таблице со значениями привяжи таблицу трансляций через PK. И не придется менять структуру только для того, чтобы поменять потом что-то, да и работать будет быстрее. Сможешь через SELECT выбрать значения на любом языке.

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 27/12/10 в 21:36       Ответить с цитатойцитата 

<select name="LookingFor">
<option value="CORRESPONDENCE">ПЕРЕПИСКА</option>
<option value="FRIENDSHIP">ДРУЖБА</option>
...
</select>

пришел к победе коммунистического труда

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 27/12/10 в 22:10       Ответить с цитатойцитата 

Редко вижу этот тип данных. Насколько я знаю, эта хрень воспринимается как строка и работать надо как со строковым полем.

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 27/12/10 в 22:24       Ответить с цитатойцитата 

http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html

Цитата:
The SET elements are stored in the MySQL table as a bitmap: each element is represented by a single bit


Все равно хуйня - выборка работает медленно. Ниже:

Цитата:
Why You Shouldn't Use SET
...
Fourth, an INDEX on a set datatype is going to refer to the set as a whole and will not be used for searching individual elements


Это о том, что в данном случае для того, чтобы выбрать список баб, готовых простопоебаццо, надо будет перебрать все записи, делая побитовое сравнение "выставлен ли бит Простопоебаццо". Что для сайта знакомств окажется жопой, как несложно догадаться. Есть смысл применять этот тип данных только для чисто информативного поля, по которому никогда поиск вестись не будет.

Нормальную архитектуру надо делать, с нормализованной базой, и все хорошо будет.

0
 

Опытный плюсополучатель

С нами с 09.06.05
Сообщения: 8305
Рейтинг: 186

Ссылка на сообщениеДобавлено: 29/12/10 в 20:21       Ответить с цитатойцитата 

FXIX писал:
<select name="LookingFor">
<option value="CORRESPONDENCE">ПЕРЕПИСКА</option>
<option value="FRIENDSHIP">ДРУЖБА</option>
...
</select>

FXIX, эт чо?

-1
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/12/10 в 20:53       Ответить с цитатойцитата 

то что ты хотел. но без распарсивания. юзер выбирает "ПЕРЕПИСКА" а в post летит "CORRESPONDENCE".

пришел к победе коммунистического труда

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 29/12/10 в 21:27       Ответить с цитатойцитата 

как оригинально

0
 

Опытный плюсополучатель

С нами с 09.06.05
Сообщения: 8305
Рейтинг: 186

Ссылка на сообщениеДобавлено: 29/12/10 в 21:35       Ответить с цитатойцитата 

FXIX писал:
то что ты хотел. но без распарсивания. юзер выбирает "ПЕРЕПИСКА" а в post летит "CORRESPONDENCE".

Сдаётся мне, что ты не въехал в тему вопроса.
Хорошо, давай применим твой метод. Посмотри на мой первый пост. Допустим, юзер выбрал CORRESPONDENCE, FRIENDSHIP, SEX, FLIRT, VACATION.
В соответствии с этим, значение SET-поля будет равно 539 (1+2+8+16+512). А теперь примени свой гениальный метод, чтобы из числа 539 получить именно нужные значения (CORRESPONDENCE, FRIENDSHIP, SEX, FLIRT, VACATION) программным путём на РНР.
Или ты решил поучить меня как селекты в дропдаунах форм делать и данные POST-ом отправлять? icon_lol.gif

SET не хранит строку! SET хранит биты. Двойку в степени. И мне надо распарсить это значение и получить на их основании строчный вариант.

-1
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/12/10 в 22:30       Ответить с цитатойцитата 

так выражайся яснее smail101.gif. что надо сделать? юзер выбрал несколько значений, и надо по этим значениям выбрать из базы строчки, так?





можно LIKE заюзать или FIND_IN_SET.

пришел к победе коммунистического труда

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »