• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:いろいろな処理をさせてSQL文を効率的に作りたい)

SQL文での効率的な処理方法とは?

このQ&Aのポイント
  • PHPでSQL文を効率的に作成する方法についての質問です。質問者は、複数の$_REQUESTの値をMYSQLのSQL文に組み込んで処理したいと考えています。具体的には、$lllという配列に$_REQUESTのキーとMYSQLのカラム名を対応させて、foreachとswitch文で処理を分けながら$qqqというSQL文に組み込んでいます。また、キーごとに処理を分けるための条件分岐も記述しています。
  • 質問者のコードでは、$_REQUESTの各値をキーごとに$lllと対応させて、処理を分けながら$qqqのSQL文に組み込んでいます。具体的には、GETパラメータ「getA」の場合は配列に分割し、getBの場合はそのまま、getCの場合はそのままの値を使用しています。また、WHERE句の条件もキーごとに分岐して記述しています。
  • 以上の処理で、質問者は$_REQUESTの値を効率的にMYSQLのSQL文に組み込めていると考えています。なお、$qqqのSQL文では、指定された条件でテーブルのデータを取得し、指定の並び順で結果を返すようになっています。また、取得するデータの数にも制限をかけています。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

質問は何でしょうか? ざっと見たところでは、 (1) $_RESUEST[$key]が空文字列だったら処理をスキップしているのにそれを考慮してステートメントを組み立てていない (2) プレースホルダの記述がおかしい(プレースホルダになっていない)。 という点が気にはなりますが、いずれにしても$qqqやそれに引き渡す値をprintしてみればわかることだとは思います(それがデバッグですから)。

taurin1000kg
質問者

お礼

$_REQUEST[$key]があるだけ、それに合わせた処理をさせて、 必要なだけSQL文を組み立てていきたいです。 指摘してもらった(1)と(2)はこちらでオッケーですか? $lll = array( "getA"=>"mysql_colum_name_A", "getB"=>"mysql_colum_name_B", "getC"=>"mysql_colum_name_C", "getD"=>"mysql_colum_name_D", "getE"=>"mysql_colum_name_E" ); $yyy = 'SELECT * FROM table WHERE 1'; foreach($lll as $key=>$val){ if(!isset($_REQUEST[$key]) or $_REQUEST[$key]==='') {$_REQUEST[$key]="";} switch($key){ case "getA": $ga = explode("+", $_REQUEST[$key]); $yyy .= ' AND {$r[0]} <= {$val} AND {$val} < {$r[1]}'; break; case "getB": $yyy .= 'AND {$val} BETWEEN CURDATE() - INTERVAL {$_REQUEST[$key]} YEAR AND CURDATE() - INTERVAL 1 DAY'; break; case "getC": case "getD": case "getE": $yyy .= ' AND {$_REQUEST[$key]} <= {$val}'; break; ~ 他のcaseが続く ~ } } $ddd = new PDO($host,$user,$pass); $sss = $ddd->prepare($qqq); $rrr = $sss->fetchAll(PDO::FETCH_ASSOC);