• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:不動産検索サイトのような複数条件による多重検索について)

複数条件による不動産検索システムの実現方法

このQ&Aのポイント
  • 不動産検索サイトのような複数条件による多重検索を実現する方法について説明します。
  • PHP・MySQLを使用して不動産検索システムを構築している場合、orとandが混じった条件に対応するためにはSELECT句whereをどのように組み合わせるかが重要です。
  • 例えば、地域が中央区、千代田区、港区であり、家賃価格が50000円から60000円であり、ペット可という条件を満たす物件を検索したい場合は、それぞれの条件をANDで結合してWHERE句を使用します。また、別の例として、地域が千代田区であり、家賃価格が下限なしから60000円であり、敷金が50万円以下であり、ペット可であり、駐車場ありの条件を満たす物件を検索したい場合は、それぞれの条件をORで結合してWHERE句を使用します。

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

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

あ、個別条件のORをANDでつなぐという意味ですね。 ORはANDにまけてしまうのでかっこでくくればすみます。 もちろんINがつかえるようなものはそれで対応してもいいでしょう。 SELECT * FROM テーブル WHERE 1 AND (地域='中央区' OR 地域='千代田区' OR 地域='港区') AND 家賃価格 BETWEEN '50000' AND '60000' AND ペット=1 >あと、WHEREのすぐ後にある1とは何でしょうか? 説明不足ですみません。 プログラムでSQL文を書くときの手法で、1に対してANDでつないで いくというのが何かと便利なのです。 つまり WHERE a=1 and b=1 とかくのを WHERE 1 and a=1 and b=1 とかきます。 1はtrueということですね。 こうしておくとwhere節がなにも指定しない場合でも where 1 つまりつねに全てを表示するという設定になるので プログラムで場合わけが必要なくなります。 そのあたりはプログラムを書いていると便利さがわかると思います。 例) $sql ="SELECT *"; $sql.=" FROM HOGE"; $sql.=" WHERE 1"; $sql.=" AND a=1"; $sql.=" AND b=1"; 蛇足ですが全ての条件をORで繋ぐ場合は0(FALSE)をつかいます。 SELECT * FROM HOGE WHERE 0 OR a=1 OR b=1

SOU48
質問者

お礼

前回に続き、詳しく教えて頂き有り難うございます! 前回の回答も含めて、これでばっちりいけそうです。 それよりも「where 1」・「where 0」の使い方、びっくりしました。 皆様からすれば当たり前の手法だったのかも知れませんが 私には目から鱗でした・・ 条件式はユーザー定義関数から動的に生成するつもりだったので 条件式が発生しない場合、どうwhere句を回避させるか 思案していたところでした。 本当に有り難うございます!

その他の回答 (1)

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

私の理解がただしければ全ての条件はANDに見えますがいかがでしょうか? 共通的な書き方をするためにひとつしかない項目でもINを 以下という書き方でも0からその数の間という書き方をすると プログラムとして書きやすいと思います その他についてはそれぞれの項目にフラグをたてるような やり方になるでしょう。 SELECT * FROM テーブル WHERE 1 AND 地域 IN ('中央区','千代田区','港区') AND 家賃価格 BETWEEN '50000' AND '60000' AND ペット=1 SELECT * FROM テーブル WHERE 1 AND 地域 IN ('千代田区') AND 家賃価格 BETWEEN '0' AND '60000' AND 敷金 BETWEEN '0' AND '500000' AND ペット=1 AND 駐車場=1

SOU48
質問者

補足

有り難うございます。 よく考えれば、IN句を使えばorとandが共存可能ですね。 あと、WHEREのすぐ後にある1とは何でしょうか?

関連するQ&A