Проектирование базы данных MySQL: несколько значений в одном поле - PullRequest
0 голосов
/ 25 октября 2011

Мне нужно создать индекс по 3 столбцам:

`gender` tinyint(1) NOT NULL default '0',
`age` tinyint(2) NOT NULL default '0',
`is_looking_for` varchar(30) NOT NULL default ''

Проблема в третьем столбце, который является VARCHAR, и этот индекс не будет использоваться.Я не могу сделать это INT.Каждый пользователь, который создает профиль на этом сайте знакомств, отвечает на вопрос «Я ищу…», и он / она может выбрать несколько вариантов, например, ищу мужчинуищу женщину или пару (женщина + женщина)ищу мужчину или женщину, пару (мужчина + женщина)

Теперь я сохраняю эту информацию в поле VARCHAR (is_looking_for) следующим образом:

1,3,5

и запросы MySQL выглядятнапример:

select from profiles where gender='$gender' and age between $minage and $maxage 
and is_looking_for LIKE '%$lookingfor%';

Этот запрос очень плохой, но я не знаю, как решить эту проблему.Я не хочу создавать разные столбцы для каждого варианта пола - мужской, женский, пара (m + f), пара (f + f) и т. Д., Потому что тогда мне нужно создать несколько индексов - отдельный индекс для каждого пола:

KEY `gender` (`gender`,`age`,`female`)
KEY `gender_1` (`gender`,`age`,`male`)
KEY `gender_2` (`gender`,`age`,`couple_male_female`)

и т. Д.

У меня была идея назначить уникальный номер каждой возможной комбинации, а затем сохранить этот номер в поле INT, но я сдался, потому что это слишком сложно.

Может кто-нибудь помочь?Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Нормализуйте свой дизайн. Создайте отдельную таблицу, в которой перечислены все эти «искомые» переменные, каждая из которых имеет свой уникальный идентификатор.

1. looking for male
2. looking for female
3. looking for male+female
4. looking for ...

Затем еще одна таблица, которая связывает эту новую таблицу с вашей таблицей знакомств:

date_id    looking_for_id
69         2
69         4

что означало бы, что дата # 69 ищет женщину, или ...

0 голосов
/ 25 октября 2011

Вы, вероятно, должны создать ENUM.ENUM предназначен для этого.

Посмотрите документы: http://dev.mysql.com/doc/refman/5.0/en/enum.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...