SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

プログラミング未経験から始めるPHP入門

PHPを使ってデータベースを操作しよう!
プログラミング未経験から始めるPHP入門(7)

第7回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (4.0 KB)

絞込み検索を行うSELECT文の実行

 次に、http://localhost/codezine7/search2.phpにアクセスしてみてください。こちらのプログラムでは、実際に絞込み検索機能を実装してあります。まずは、エリアや予算で絞込み検索を行ってみましょう。

エリアを「渋谷」、平均予算を「3000~4000」に設定した絞込み検索結果
エリアを「渋谷」、平均予算を「3000~4000」に設定した検索結果

 設定した絞込み条件に一致している検索結果が表示されたら、「search2.php」をメモ帳などで開き、「search1.php」との違いを確認してみてください。「search2.php」の$sql変数を作る箇所が、「search1.php」と大分違うことに気付くはずです。

「search2.php」の内容。$sql変数を作る箇所に注意しながら、「search1.php」の内容と見比べてみよう
「search2.php」の内容。$sql変数を作る箇所に注意しながら、「search1.php」の内容と見比べてみよう

 絞込み検索は、テキストボックスの入力値を基にSQLのWHERE条件を追加することで実現します。テキストボックスの入力値は第5回で説明したとおり、$_REQUESTという特殊な連想配列に入ります。

 例えば、49行目にある下記のソース部分を見てください。

if( $_REQUEST["address"] != "" ) {
	$sql = $sql . " AND address = '" . $_REQUEST["address"] . "'";
}
 

 $_REQUEST[“address”]に、ブラウザ画面上の「エリア」セレクトボックスで選択された値がに入ります。また、セレクトボックスで[全て]が選択された場合は、13行目にある <option value="">全て</option>を見れば分かるように、「value=””」の部分が空のため、$_REQUEST[“address”]に何も値が入りません。

 したがって前述の49行目の部分では、これを利用して「もしも$_REQUEST[“address”]が空でなければ、AND address = ‘選択された地域’という絞込み条件を追加する」ということを行っています。ここでもドット記号()が登場していますが、これは既存の$sqlという変数に対して「AND address = ‘xxx’」という条件を付加し、変数の内容を上書き保存していると考えてください。

 また、WHERE 1 = 1の部分ですが、1と1は必ず等しいですから、この条件は絞込みには生かされず、一見無意味なように思えます。実はこの条件は、プログラムを効率良く書くためにあえて記述しています。このアプリケーション上で可能な検索パターンを考えてみてください。

・絞込み条件無しの場合( WHERE 条件無し )
・エリアによる絞込みのみ ( WHERE エリア条件 )
・最低価格による絞込みのみ( WHERE 最低価格条件 )
・エリア及び最低価格による絞込み( WHERE エリア条件 AND 最低価格条件)
・最低価格及び最高価格による絞込み ( WHERE 最低価格条件 AND 最高価格条件 )
… 以下、様々な組み合わせが存在する

 例えば最低価格条件1つを見ても、「WHERE 最低価格条件」となる場合もあれば「AND 最低価格条件」となることもあり、WHEREANDを使い分けるには煩雑な書き方になりそうです。

 サンプルソースのsearch3.phpはWHERE 1 = 1を使わずに記述したPHPの例です。$is_where_existsという変数は初期値が0で、初めて検索条件が現れた時に1になります。$is_where_existsが0か1かをif文で判定し、WHEREまたはANDのいずれかを選択する処理を記述しています。逆に、WHERE 1 = 1というダミーの検索条件をあらかじめ設定しておけば、絞込み検索をするための条件を指定するときに「WHEREの直後を書き換えずに、全てAND以降に追加すれば良い」ということになります。

search3.phpの中身(WHERE 1 = 1を使わずに記述した例)
search3.phpの中身(WHERE 1 = 1を使わずに記述した例)
・絞込み条件無しの場合( WHERE 1 = 1 )
・エリアによる絞込みのみ( WHERE 1 = 1 AND エリア条件 )
・最低価格による絞込みのみ( WHERE 1 = 1 AND 最低価格条件)
・エリア及び最低価格による絞込み( WHERE 1 = 1 AND エリア条件 AND 最低価格条件)
・最低価格及び最高価格による絞込み( WHERE 1 = 1 AND 最低価格条件 AND 最高価格条件 )
… 検索条件により、SQLのAND以降が変わる

 このように、変数$sqlWHERE 1 = 1をあらかじめ設定しておくことで、条件を追加する際はAND以降を付加すれば、思いどおりの検索結果が表示されます。

 それでは、$sqlがどのように組み立てられているかを見るために、mysql_query命令を実行する直前、例えば60行目に下記の命令を追加して、再度画面で検索してみましょう。

print($sql);
60行目に「print($sql);」追記した場合の検索結果。絞込み検索で指定した条件の変数$sqlの内容が表示された
絞込み検索で指定した条件の変数$sqlの内容を表示

 エリアや平均予算の検索項目が、設定されている場合と設定されていない場合とで$sqlの内容が異なることが分かるはずです。

次のページ
PHPから更新系SQLを実行

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
プログラミング未経験から始めるPHP入門連載記事一覧

もっと読む

この記事の著者

大家 正登(オオイエ マサト)

デジタルハリウッド『PHP 講座』講師。学生時代、スペイン語を専攻していたものの何故かプログラム言語に心が傾き、近所のフリープログラマーに弟子入り修行。その後中堅 SIer に 3 年間所属し、現在はフリーエンジニア。仕事の傍らジャズを演奏し、コントラバス 2 台と同居中。(ITエンジニア・大家正登のWeb...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3801 2009/04/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング