我需要在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)等等,因为那时我需要创建多个索引 - 每个性别的单独索引:< / p>
KEY `gender` (`gender`,`age`,`female`)
KEY `gender_1` (`gender`,`age`,`male`)
KEY `gender_2` (`gender`,`age`,`couple_male_female`)
等
我有一个想法是为每个可能的组合分配一个唯一的数字,然后将这个数字存储在INT字段中,但我放弃了,因为它太难了。
可以帮助别人吗?感谢。
答案 0 :(得分:2)
规范化您的设计。创建一个单独的表,列出所有“查找”变量,每个变量都有自己唯一的ID。
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日期正在寻找女性,或者......
答案 1 :(得分:0)
你应该创建一个ENUM。 ENUM就是为了这个目的。
查看文档:{{3}}