ショボ短歌会

現在、ユーザー登録処理の設計を行っております。
ユーザー登録情報に、「趣味」という項目があるのですが、
20個の種類が有ります。

私が想定しているのは、ユーザーテーブルに
20byte程の「趣味」列を作り、
ブラウザ側でチェックをした種類の値を見て、
その値のbyte目に"1"が立ち、それ以外は
"0"が立つという処理です。

(例)
<input type="checkbox" name="hobby" value="1">
<input type="checkbox" name="hobby" value="2">
<input type="checkbox" name="hobby" value="3">



<input type="checkbox" name="hobby" value="20">

↓(1番目、3番目、20番目にチェックが入った場合)

10100000000000000001 が、「趣味」列に入る


この作りをした際、値を格納するテーブルの列には、
「byteではなく、bitを使用した方がよい」という有り難いアドバイスを
頂いたのですが、実際にMySQLにBIT列を設けて、どのようにPHPから
データを格納すればよいか分かりませんでした(涙)。

どなたか、お教えいただけませんでしょうか。お願い致します。

A 回答 (1件)

こんにちは。


前回のやりとりは静観していました。
おそらく「ビットで持つ」と発言した方はC言語的な意味合いで言ったのだと思います。
趣味というひとつのカラム(これは例えばINT型にします)を設け、そのINT型のひとつの値に対してビットを立てて管理しようということだと推測されます。
つまり質問者さまの例で言えば、10100000000000000001 は16進数で表現すると A0001 となり更に10進数で表現すれば 655361 という数字になります。
これを趣味カラムにセットすればひとつのカラムで管理できるということになります。
たぶん前回の回答者さまはこういうことを言いたかったのではと推測できます。

しかし僕はあまりお勧めしません。
理由としては一目ではどこのビットが立っているかわからないからです。
ですので同じような考え方で趣味はCHAR型のカラムにし、文字列として 10100000000000000001 を持つ方がよいと思います。
こちらを推奨する理由にはもうひとつあって、扱えるビット数(厳密にはビットではないですが)が格段に多いということです。
INT型で持ってしまうと32ビット、つまり32個の趣味までしか管理できません。
その点CHAR型やTEXT型にすれば相当な数が扱えます。
ま、その分領域も食いますが気にするほどではないでしょう。

というわけで全然BIT型の回答ではないですが、参考までに。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます!
私はまだまだ初心者プログラマですが、
その私であっても、明快な内容でした。

ご説明いただいただけでなく、
アドバイスもしていただき、感謝しております。
どうもありがとうございました。
とても参考になりました。

お礼日時:2005/08/13 11:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!