特にPHPに限った質問というわけではないのですが、複数のチェックボックスからのデータをmySQLにためて、ユーザーが検索できるプログラムを作っています。
チェックボックスの数があまり多くないので、項目ごとにフィールドを追加してやってもいいのですが、あまりスマートではないし、後で項目の追加があった場合に対応できないので、一つのフィールドにすべてのチェックボックスのデータを納めたいと思っています。
一般的にこのような場合、どのように処理するのでしょうか?
方法を考えたのですが、チェックボックスのvalueに
value=1 value=2 value=4 value=8・・・として、チェックがある項目は全部足して2進数に変換してDBに登録し、(例えば、value=1とValue=8にチェックがあったら9となり、2進数では1001でonが判別できます)ユーザーが検索するときには同じく検索条件を2進数に変換して論理積で1以上のものを抜き出せば自分の想像通りの動きはしそうです。
ただ、DBから抜き出すときにいちいち論理積でパターンマッチしたものを抜き出す必要があるので、あまり高速ではない(?)&SQL文一発で書けないのでちょっと処理が面倒かなと思っています。
ちょっと説明がうまくできなくてわかりづらいとは思いますが、何かいい方法はないでしょうか?
No.3ベストアンサー
- 回答日時:
#3です。
すみません「OR field = 9」が抜けてました。最後の部分に、
if ($flg) {
$sql .= "OR field = $value";
} else {
$sql .= "field = $value";
}
が必要でした。それと
検索値がビット績の結果のいずれかと同じ値だった場合の処理も必要ですね、、、
もう一つフラグを用意して立っていた場合に、追加するのを止めればいいのかな?
ご自身で考えてください。
No.2
- 回答日時:
検索する値と2のN乗とのビット積が0でない場合に 'OR' で
つなげてやればどうでしょう?
質問の例だと、
検索する値:9
2の0乗とのビット績:1
2の1乗とのビット績:0
2の2乗とのビット績:0
2の3乗とのビット績:8
なので
SELECT * FROM table WHERE field=1 OR field=8
あまりスマートじゃないけどスクリプトの例です。
($valueは検索値)
$n = 4;
$flg = 0;
$sql = "SELECT * FROM table WHERE ";
for ($i = 0; $i < $n; $i++) {
$k = pow(2, $i);
$q = ($value & $k);
if ($q > 0) {;
if ($flg) {
$sql .= "OR ";
}
$sql .= "field = $q ";
$flg = 1;
}
}
No.1
- 回答日時:
私だったら、チェックボックスごとに
フィールド設定します。
わかりやすいから。
> 例えば、value=1とValue=8にチェックがあったら9となり
このやり方でやるのならば、DBに格納するのは10進数にします。
この例なら9。
SQLで引っ張るときは、おっしゃるとおり論理積で
select * from テーブル名 where 9 & フィールド名 = 9;
とかやれば、出てくるかと。
ご回答ありがとうございます。
説明が足りずに申し訳ありません。
>select * from テーブル名 where 9 & フィールド名 = 9;
そうすると、value=1とValue=8にチェックがあるときの完全一致の場合のみ検索結果がヒットすることになりますよね。
value=1のときだけチェックが入っている場合もヒットさせたいし、8にチェックがあるときだけでもヒットさせたいのです。(この辺を略して「論理積で1以上」と書いたのです。わかりにくくてすいません)
何かいい方法はないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php セレクトボックス 値取得
-
「"」(ダブルクォーテーション)...
-
プルダウンとCSVの連動
-
foreachで次の行の値を取得して...
-
PHP ボタンが押されたら処理を...
-
ボタンをクリックでPHP文を実行
-
phpで変数を使ってcopyできない
-
PHP MySql 画像を取得
-
フォームへの前回入力値をクリ...
-
検索時の選択内容を保持する方法
-
PHPで入力フォームでデータを確...
-
phpで、フォームのラジオボタン...
-
【PHP】 文字サイズの変更につ...
-
<input type="hidden" >で配列...
-
フォーム送信後の更新ボタンで...
-
MySQL,PHPのリロードによる二重...
-
POST GET HTTP 404 未検出
-
テキストボックスとsubmitボタ...
-
画面が更新されてもチェックボ...
-
PHPの関数実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
<select>文、foreachと初期値設定
-
php セレクトボックス 値取得
-
phpでのselect値の取得・表記に...
-
連動させたいセレクトボックス...
-
ドロップダウンで送信先を変更...
-
[Ethna]selectボックスに空値を...
-
phpのプルダウンメニューで選ん...
-
プルダウンリスト(コンボボッ...
-
phpでのセレクトボックスの値を...
-
【PHP&JavaScript】複数の別ウ...
-
ループでチェックボックスにche...
-
選択されたプルダウンの値を変...
-
複数 selectフォームから今回on...
-
GET又はPOSTで受け取るデータに...
-
PHP セレクトボックスの値 GET...
-
チェックボックス&セレクトボ...
-
複数のセレクトボックスで
-
Smartyで、セレクトボックスが...
-
オプションメニューの選択され...
おすすめ情報