私は3列に索引を作成する必要があります。MySQLデータベースの設計:同じフィールドに複数の値
`gender` tinyint(1) NOT NULL default '0',
`age` tinyint(2) NOT NULL default '0',
`is_looking_for` varchar(30) NOT NULL default ''
問題はVARCHARであり、このインデックスが使用されることはありません3番目の列です。私はそれをINTにすることはできません。この出会い系サイトでプロフィールを作成する各ユーザーは、「私は探しています」という質問に回答し、複数のオプションを選択することができます。
男性を探しています
女性を探している女性
1,3,5
とMySQLのクエリは次のようになります:男性または女性、カップル(男性+女性)
は今、私はこの方法でVARCHAR(is_looking_for)フィールドにこの情報を格納するために探して
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フィールドに、この番号を保存するためのアイデアを持っていたが、それはあまりにも難しいので、私はあきらめました。
誰かを助けることができますか?ありがとう。
複数の値を持つことができます。おそらく、 'set'が' enum'よりも適切です。 –
hair raisin、はい、私は "SET"を使うことができましたが、複数列のインデックスを作成する必要があります。私は、MySQLはそのようなマルチカラムインデックスtinyint + tinyint + setを使用しないと考えています。 "SET"は整数ではありません。私は間違っている? – tfe