• ベストアンサー

検索条件

現在、MYSQL+PHPにて簡単な検索フォームを作っていますが、なかなか思い通りに出来ません。 例えば、フォームに4つのリストボックス項目があり、それぞれA,B,C,Dとします。 現在は SELECT * from table where A='$A' and B='$B' and C='$C' and D='$D' としていますが、フォームでAとBしか選択されなかった時などは、該当なしになってしまいます。 というのもwhere分のC=$CとD=$Dが必要ないから。 ちなみに、フォームの中のタグはそれぞれ <SELECT NAME=***> <OPTION VALUE = "">選択して下さい</OPTION> <OPTION VALUE = "***1">***1</OPTION> <OPTION VALUE = "***2"***2</OPTION> </SELECT> みたいな感じのが4つ(A~Dまで)。 (***は文字が入ってます) これを、選択されていないのはWHERE分に付け加えないようにするにはどうすれば良いでしょうか? または、私のやり方以外に何か良い方法はありますでしょうか? 説明が解りにくいかも知れませんが、お分かりの方、ヒントや方法をお教え願います。 宜しくお願いします。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

where句を入力項目の有無によって、PHPで動的に生成する必要があると思います。 以下は例です。 --------------------------------------------------------- $query = "SELECT * FROM table"; $where_array = array(); if ($A != '') { array_push ($where_array, "A = '$A'"); } if ($B != '') { array_push ($where_array, "B = '$B'"); } if ($C != '') { array_push ($where_array, "C = '$C'"); } if ($D != '') { array_push ($where_array, "D = '$D'"); } $where = join(' and ', $where_array); if ($where != '') { $query .= " WHERE $where"; } $ret = mysql_query ($query); ---------------------------------------------------------

deia
質問者

お礼

回答ありがとうございました。 見事に思い通りに作る事が出来、その他の作成もバリバリ進んでおります。 この度は、本当にありがとうございました。 また、何かありましたらお願いします。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

動的にWHWRE句を生成するか、 入力のない項目は、A='*' のようにワイルドカードをセットするか どちらかではないでしょうか。

deia
質問者

お礼

回答ありがとうございました。 *を使って試してみましたが、思い通りにいかず下の方の回答方法で解決出来ました。 また、何かあればお願いします。