• ベストアンサー

複数条件の検索について

下記のように$_GETで条件を取得して検索しているのですが、 もし取得できなかった場合はすべてのデータを取り出したいと思っています。色々と調べてみたのですが初心者ですのでどうもうまくいきません… どのようにすればうまくいくのか分かる方がいましたら宜しくお願いします。 性別と年齢の検索 この場合は性別が設定されていないという過程で、指定の年齢に該当する男女を抽出する場合です。 $sex = $_GET["sex"]; $age = $_GET["age"];     //性別が設定されていない場合は男女     if($sex == NULL)     {      $sex = 男、女;     } $arr = array();      ・      ・      ・  WHERE t_data.sex = '" .$sex. "' AND t_data.age = '" .$age. "' return $arr;

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

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.3

文字列だと遅いですが、 where t_data.sex in (?) とin演算子を使ってみては? in ('男') in ('女') in ('男','女') logicとしてはすっきりします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

PHPなどプログラムWHERE節につなげるには 真(1)にANDでつないでいくと効率的にかけます。 適当に書いたので自信はないですが、だいたい以下の ような形がよいのでは? (全てが未設定だと、ヒットさせない) $sex = $_GET["sex"]; $age = $_GET["age"]; $job = $_GET["job"]; $area= $_GET["area"]; $sql_where="where 1"; if ($sex!="" ) $sql_where.=" AND `t_data`.`sex`='$sex'"; if ($age!="" ) $sql_where.=" AND `t_data`.`age`='$age'"; if ($job!="" ) $sql_where.=" AND `t_data`.`job`='$job'"; if ($area!="") $sql_where.=" AND `t_data`.`area`='$area'"; if ($sex=="" and $job=="" and $job=="" and $area=="") $sql_where="where 0";

manachu
質問者

お礼

ご回答ありがとうございます。 非常に分かりやすかったです。一度試してみることにします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>性別が設定されていない場合は男女 これは無意味なのでやめましょう。 whereにsexを指定しなければ、よいだけなので。 ただ、今のやり方だと、絞込みがほとんどなくなってしまう 恐れもありますので、最低限の条件がない場合は SQLにデータを投げずに、条件設定エラーのような表記を クライアントに返すような仕組みが必要だとおもいます。

manachu
質問者

お礼

ご回答ありがとうございました。「性別、年齢、地域、職業」すべて設定してないとエラーになるんです…一つでも条件があれば抽出したいのですがそれをどうやってPHPファイルに記述すればいいのか…もう少してみます。

関連するQ&A