入力フォームから複数の情報が選択され、その選択肢に応じてmysqlから情報を取得する一般的な状況です。
例えば以下のような選択肢がある場合、
q1はチェック入力必須として、q2、q3が任意とします。
とすると以下のように3パターンの条件でデータを抽出することが考えられます。
1.q1
2.q1 + q2
2.q1 + q3
HTML
1<div id="q1">q1</div> 2 <input type="checkbox" name="a[]" value="1">1 3 <input type="checkbox" name="a[]" value="2" >2 4 5<div id="q2">q2</div> 6 <input type="checkbox" name="b[]" value="1">1 7 <input type="checkbox" name="b[]" value="2" >2 8 9<div id="q3">q3</div> 10 <input type="checkbox" name="c[]" value="1">1 11 <input type="checkbox" name="c[]" value="2" >2 12
実際には、入力項目が多いため、もっと多くのパターンがありえるのですが、
実務的にこのような場合、php & MYSQL (PDO)上
switchのような形で分岐させてそれぞれのswitch内の処理でwhereの条件を変えていくべきなのでしょうか?
未だ不慣れな私にはこのような方法しか思い浮かびません。。(下記の例をご覧ください)
そうなるとかなりのパターンがあるので、適切ではないかとも考えています。
このような処理で実務的、一般的なものがあればアドバイスを頂ければ幸いです。
以下は上記のswitchイメージになります。
PHP
1 2try { 3switch (XXX){ 4case 1: 5 $stmt=$pdo->prepare("SELECT XXX FROM XXX 6 where ABC = :ABC"); 7 $stmt->BindValue(':ABC',$a,PDO::PARAM_STR); 8 break; 9case 2://q1 & q2 10 $stmt=$pdo->prepare("SELECT XXX FROM XXX 11 where ABC = :ABC and DEF =:DEF"); 12 $stmt->BindValue(':ABC',$a,PDO::PARAM_STR); 13 $stmt->BindValue(':DEF',$b,PDO::PARAM_STR); 14以下省略 15・ 16・ 17・ 18default: 19・・ 20} 21 22$stmt->execute(); 23 $result2=$stmt->fetchall(PDO::FETCH_NUM); 24} catch (Exception $e) { 25 prep($e->getMessage()); 26}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/16 09:49
2017/05/17 04:10
2017/05/17 08:23