• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:大量チェックボックスの実装方法について)

効率的な大量チェックボックスの実装方法は?

このQ&Aのポイント
  • ユーザー登録処理の設計において、20個の種類がある「趣味」という項目の実装方法を考えています。
  • 処理速度と今後の趣味の種類数増加に重点を置いた最適な実装方法は何でしょうか?ユーザーテーブルに20byteの「趣味」列を作り、ブラウザ側でチェックした種類の値をbitフラグで格納する方法を検討しています。
  • 他の実装方法として、趣味テーブルや趣味マスターテーブルの使用が考えられますが、ユーザー数が多い場合や処理速度を考慮すると複雑になりがちです。効率的な方法があれば教えてください!

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

う~ん、他に案は出てこないですね・・・ あえていうなら、前者の方式を使うなら私はバイトじゃなくてビットにします。 前者と後者を比べるなら、私は後者を選びます。 後者の方がデータを扱いやすいというだけの理由です。 前者の場合、何番目のバイトがどの趣味に関連づけられているかはプログラム上でしかわかりませんが、後者の場合、データベースだけで表現できます。 やはり、趣味が増えた時や趣味に区分をつけるなどする時などを考えると明らかに後者の方が変更しやすいです。 処理速度を心配されているようですが、それはどのようにデータを処理するかによるのではないでしょうか? 登録処理や編集処理などと言った処理は普通なら滅多にしませんよね?読み込みも毎回読み込むわけじゃありませんよね? その上で最大同時処理数や処理負荷を考えると、たいした負荷はかからないと思います。 それでも心配なら、簡単なプログラムを作って処理負荷を計測してみるのもいいかもしれません。

bacho39
質問者

お礼

親切なご回答、ありがとうございます。 とりあえず、前者の方式でビットにし、 処理負荷の計測をやってみます。 とても参考になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.2

答える立場になって考えると、チェックボックスがたくさん並んだ登録画面は、見ただけでウンザリしてしまうような気がします。 「趣味」をカテゴリ分けして、別画面に階層化するというUIはいかがでしょう? 上位階層のチェックがOFFなら下位のものはノーチェックで良いわけですし。 こういう構造はbacho39さんが作成しようとしているものには当てはまらないかもしれませんが。

bacho39
質問者

お礼

確かに答える側からすれば、ウンザリかもしれませんね(汗)。 でも一画面で選べることも、ユーザーからみれば つかいやすい内容であるとも思います。 とりあえず、別画面にする設計にはなりそうもないので、 チェックボックスを並べて表示します。 アドバイスいただき、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQLのBIT型列へのデータ格納について

    現在、ユーザー登録処理の設計を行っております。 ユーザー登録情報に、「趣味」という項目があるのですが、 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から データを格納すればよいか分かりませんでした(涙)。 どなたか、お教えいただけませんでしょうか。お願い致します。

    • 締切済み
    • PHP
  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

    • ベストアンサー
    • PHP
  • チェックボックスについて(ruby)

    cgiのプログラムでチェックボックスについてわからないことがあります。 今書いてある、プログラムだとすべての値を受け取ってしまいます。 選択されたものだけ表示させるようにさせたいと思っています。そのプログラムfor文で書いているのですが、どのように書いたらよいのでしょうか? 教えてください、お願いします! <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィール入力ページ</title> </head> <body> プロフィールを入力してください。<br> <form method="GET" action="http://profile2.cgi"> 名前: <input type="text" name="name"> <br> <br> 性別: <input type="radio" name="sex" value="男性">男 <input type="radio" name="sex" value="女性">女 <input type="radio" name="sex" value="その他">その他 <br> <br> 趣味: <input type="checkbox" name="hobby" value="映画">映画 <input type="checkbox" name="hobby" value="音楽">音楽 <input type="checkbox" name="hobby" value="スポーツ">スポーツ <input type="checkbox" name="hobby" value="料理">料理 <input type="checkbox" name="hobby" value="その他">その他 <br> <br> <br> <input type="submit" value="送信"> </form> </body> </html> #!/usr/local/bin/ruby print "Content-type: text/html; charset=euc-jp\n\n" $KCODE = "e" require "cgi" cgi = CGI.new namae = cgi["name"] sei = cgi["sex"] syumi = cgi.params["hobby"] ary = ["映画, ", "音楽, ", "スポーツ, ", "料理, ", "その他 "] str = ary[0] + " " + ary[1] + " " + ary[2] + " " + ary[3] + " " + ary[4] + " " syumi = "" for x in str syumi = syumi + x end print <<EOS <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィールの確認</title> </head> <body> 名前: #{namae} <br> <br> 性別: #{sei} <br> <br> 趣味: #{syumi} </body> </html> EOS 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。

    • ベストアンサー
    • CGI
  • 特定のチェックボックスをチェックするには

    特定のチェックボックス「白」を CHECKEDにする方法を教えて下さい。 #数と位置が変動するので配列は取得できません。 #「もしもcolorの値が白なら CHECKED」のような関数にしたい。 <INPUT TYPE="CHECKBOX" NAME="color" VALUE="おまかせ"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="白"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="ピンク"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="緑">

  • チェックボックスの値を(1,0)のようにすべて送信する方法

    formをsubmitすると、チェックボックスの値は、 チェックされた項目のvalue値が配列の形で送信されますよね。 たとえば、 <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="111" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="222" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="333" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="444"> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="555" CHECKED> だと、 [111,222,333,555] のように。 今回は、表形式でデータを表示し、 チェックされた行の、他の列の値(フィールド)も取得したいのです。 他の列のフィールドは、チェックされていない行でも入力されている可能性があります。 そうすると、そのフィールドの値も配列にして送ってしまうと、 チェックボックスの値と数が合わなくなり、横方向での関連付けが出来なくなってしまいます。 なので、チェックボックスの送信値を、配列の要素数は全件で、 チェックされたかされていないかということが分かるように することは不可能でしょうか? JavaScriptは規約により、使うことが出来ない状況で困っています(><) 何か案があれば教えてください。

    • ベストアンサー
    • HTML
  • チェックボックスをクリックした際、自動的に他の値も

    ■チェックボックスをクリックした際、自動的に他の値も追加したい 下記のようなチェックボックスがあった際に、 <input type="checkbox" name="hoge[]" value="1" />ホゲ  <input type="checkbox" name="piyo[]" value="1" />ピヨ  <input type="checkbox" name="puyo[]" value="1" />プヨ  ホゲをクリックしたら、value="1"になるかと思うのですが、 このvalue部分を動的に生成することはできるでしょうか? 例えば、ホゲをクリックしたら(ホゲをクリックした時だけ)、 自動的に、 <input type="checkbox" name="hoge[]" value="1" /> <input type="checkbox" name="hoge[]" value="2" /> <input type="checkbox" name="hoge[]" value="3" /> <input type="checkbox" name="hoge[]" value="4" /> <input type="checkbox" name="hoge[]" value="5" /> <input type="checkbox" name="hoge[]" value="6" /> <input type="checkbox" name="hoge[]" value="7" /> <input type="checkbox" name="hoge[]" value="8" /> <input type="checkbox" name="hoge[]" value="9" /> をクリックしたのと同じ処理が走るよう、スクリプトで書くには、 どうすればよいでしょうか?

  • チェックボックス選択で(3つ)まで

    チェックボックス選択で(3つ)まで <input type="checkbox" name="fhobby" value="animation">アニメ <input type="checkbox" name="fhobby" value="game">ゲーム <input type="checkbox" name="fhobby" value="reading">読書 <input type="checkbox" name="fhobby" value="amusement">娯楽 <input type="checkbox" name="fhobby" value="comics">漫画 <input type="checkbox" name="fhobby" value="jogging">ジョギング<br> <input type="checkbox" name="fhobby" value="cycling">サイクリング <input type="checkbox" name="fhobby" value="shopping">ショッピング <input type="checkbox" name="fhobby" value="picture">絵画 <input type="checkbox" name="fhobby" value="travel">旅行 <input type="checkbox" name="fhobby" value="others">その他

    • ベストアンサー
    • HTML
  • チェックボックスのON/OFFに応じて別の複数のチェックボックスも連動ON/OFF

    7番のcheckboxをON→1,2,4,5番にチェックもON 7番のcheckboxをOFF→1,2,4,5番にチェックもOFF という風に動作させる記述をご教示ください。 よろしくお願い致します。 <html> <head> <script type="text/javascript"> </script> </head> <body> <form action="" method="post" name="myform"> 去年<br> 1番<input type="checkbox" name="kyonen[]" value="1">1月<br> 2番<input type="checkbox" name="kyonen[]" value="2">2月<br> 3番<input type="checkbox" name="kyonen[]" value="3">3月<br> 今年<br> 4番<input type="checkbox" name="kotosi[]" value="1">1月<br> 5番<input type="checkbox" name="kotosi[]" value="2">2月<br> 6番<input type="checkbox" name="kotosi[]" value="3">3月<br> 7番<input type="checkbox" name="mychk">去年と今年の1、2月をまとめてチェック<br> </form> </body> </html>

  • 複数のチェックボックス項目があり、そのチェック状態によって

    複数のチェックボックス項目があり、そのチェック状態によって 処理を分岐したいのですが、スマートなjavascriptの書き方が あれば教えてください! 【例】 <input type="checkbox" name="koumokuA" value="A1" /> <input type="checkbox" name="koumokuA" value="A2" /> <input type="checkbox" name="koumokuA" value="A3" /> <input type="checkbox" name="koumokuA" value="A4" /> <input type="checkbox" name="koumokuA" value="A5" /> <input type="checkbox" name="koumokuB" value="B1" /> <input type="checkbox" name="koumokuB" value="B2" /> <input type="checkbox" name="koumokuB" value="B3" /> <input type="checkbox" name="koumokuB" value="B4" /> <input type="checkbox" name="koumokuC" value="C1" /> <input type="checkbox" name="koumokuC" value="C2" /> <input type="checkbox" name="koumokuC" value="C3" /> <input type="checkbox" name="koumokuC" value="C4" /> もし【koumokuA】のA2とA3、【koumokuB】のB1とB4が選択された場合 同項目ではor条件、他項目ではand条件で処理したいので 考え方としては、 if(koumokuA=="A2" || koumokuA=="A3"){ if(koumokuB=="B1" || koumokuB=="B4"){ 実行内容 } } こんな感じなのですが、 実際にはチェックボックスの値は配列になるのでこのスクリプトでは動かない点と 効率よく複数のチェックボックスの選択結果を判定して、スクリプトを実行する 組み方があればご教授ください。 実行結果は、データが格納された配列の中から、選択項目に対応したデータを 表示するようにしたいのです。 よろしくお願いします。

  • チェックボックス 連結

    恐れ入ります。 <input type=checkbox name=col1 value="1"> <input type=checkbox name=col1 value="2"> <input type=checkbox name=col1 value="3"> <input type=checkbox name=col1 value="4"> <input type=checkbox name=col1 value="5"> を、 1;2;3;4;5 と連結して同一フィールドへ送信し、 読み込み時に 分割して読み込みたいのですが、どのようにしたら良いでしょうか。 よろしくお願いします。