• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【mysql : HTML】チェックボックスの処理)

【HTML】チェックボックスの処理方法とビット演算について

このQ&Aのポイント
  • チェックボックスで複数の項目をフラグとして扱うには、ビット演算を使う方法があります。
  • 例えば、チェックボックスのvalueに2進数のべき乗を使用し、チェックされた項目の値を合計値としてDBに保存することができます。
  • 他のポータルサイトではあまりこの方法を使用していないかもしれませんが、正しい方法です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ご質問の方法でも、ロジック的には恐らく正しいと思いますし、データがコンパクトになるという利点もあると思います。 ちなみに、MySQLの場合は、「set型」というのもありますのでご参考まで。(他のDBとの互換性を考えるとあまり推奨はできませんが・・・) ところで、危惧されている通り、WEB+DBにおいては、複数のチェックボックスの状態は、整数型1つにビット演算といった、「スマートな方法」でまとめるのではなく、もっと「シンプルかつ泥臭い方法」の方が好まれていると思います。 たとえば、上述の例の場合、 isLife : boolean, isDisitalLife : boolean, isHobby : boolean, isEntertainment : boolean, ... というふうに、boolean型の複数項目に展開して管理する(チェック項目が増えたら増やす)方が、あとあと良いケースもあります。(良くないケースもありますが) また、フラグがもっと多かったり、構成が動的になる場合は、関連付け用などに、複数のテーブルを作って管理する方法も視野に入ってくるかもしれません・・・。 このように、WEB+DBでの開発は、CやC++などの開発と若干異なり、「少々、データが冗長になったり、効率が最高でなくても良いので、可能な限り、シンプルかつ分かりやすく作る」ことが多いように思います。 理由はいろいろありますが、一つに、「DBを出来る限り可読にした方が、phpMyAdminなどでの管理が楽になる」ということがあります。(ビット演算の場合、例えば132という数字で、どのフラグがONなのか、一般人には分かりにくいですが、isLifeが1になっていれば一目瞭然です。緊急にDBを手直しする必要がある場合も同様。) こういった「管理」のほかにも、データが多くなった場合の「検索性能」や、今後のための「拡張性」など、いろいろな考慮点がありますので、どの方法が一番優れているということではなく、これらの諸点を、システムの仕様や利用形態に照らしながら、適材適所で選択されると良いと思います。 なお以上のご回答は、いちSEたる私個人の経験に基づく、私的見解ですので、あくまでご参考まで・・・。

yuzuru0024
質問者

お礼

回答有り難うございます。 チェックボックスが20個くらいになって なってきたら booleanだらけになってくるので どうなのかなとおもったのですが、 ”分かりやすさ”という点を意識するなら たしかにビット演算用の数値がはいると ややこしいかもしれませんね。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

検索性や拡張性など考慮するとビット演算でデータを持つのは 必ずしも効率的だとはいえません カテゴリーテーブルをつくってユーザーIDとカテゴリーIDを ひもづける処理をしたほうが良いでしょう

yuzuru0024
質問者

お礼

回答有り難うございます。 メインテーブルと関連付けた フラグ用のテーブルをひとつ作ってそこで 管理していったほうが分かりやすそうですね。