「WHERE 1=1」は条件付きSQL文が書きやすくなる魔法の言葉

今回で10記事目の投稿になります。

最初は検索エンジンに少しでも多くインデックスしてもらいたく、頑張って記事を量産している段階です!

話は変わりまして、今回はMySQLの記事になります。

仕事でも趣味でもWEBサービスを開発している僕ですが、基本的にLAMP環境の構築が多いです。

LAMPとは、データベース連動型のWebアプリケーションを開発するのに人気の高いオープンソースソフトの組み合わせ。OSにLinux、WebサーバにApache、データベースにMySQL、プログラミングにPHPかPerlかPythonを用いたシステムのこと。

IT用語辞典

ユーザーから送られてきた命令を、PHPで受け取り、MySQLに接続してデータベースから情報を取っています。

今回取り上げたいのは、「ユーザーの命令によって変わるSQL文の処理」

例えば、以下のような検索フォームがあったとします。

1

住民検索として、「都道府県」「名前」で、検索の絞込みが出来る検索フォームを作りたいとします。

この場合は、考えられる検索パターンは以下の4種類です。

  • 都道府県の指定なし、名前の入力なし(全件検索)
  • 都道府県を指定、名前の入力なし
  • 都道府県の指定なし、名前の入力
  • 都道府県を指定、名前の入力

なので、ユーザーの入力内容を判断し、SQL文を発行しなければいけないのですが、

ここで厄介になってくるのは、SQL文の検索条件指定の仕様なのです。

スポンサーリンク
レクタングル(大)

SQL文の条件指定は、書き出しは「WHERE」、2つ目以降は「AND」にしなくてはいけない

SQL文において、取得するデータの条件の設定は「WHERE句」で行います。

そして、2つ以上の条件の指定を行いたい場合は、それ以降は書き出しを「AND」にしなくてはいけません。

つまりは、ユーザーの入力内容によって、「WHEREだけでいいのか」「ANDも必要か」「WHEREもANDも必要ないのか」を判断しなくてはいけません。

これらの処理を、入力を受け取るPHPで判断するのは非常にめんどくさいです。

しかし、そんな面倒な条件分岐をなくす魔法の記述があります。

今回紹介する「WHERE 1=1」です。

WHERE 1=1 を使うことで、検索条件がすべて「AND」で繋げられる

「WHERE 1=1」とは必ず正であるという意味です。

何があっても通りますので、1=1自体に意味はないのですが、

大事なのは、「この記述でWHERE句を確定させられる」ことです。

「都道府県」「名前」で、もし検索をかけていれば「AND」で繋げて条件を指定すればOKです。

以下が、WHERE 1=1を使用した例です。(PDOクラスのオブジェクトの生成は省略します。)

このように記述することで、WHERE句の有無の判定をわざわざすることなく、コードがすっきりします。

検索条件が複数存在し、かつそれがユーザーの命令により変化する場合は、こちらの記述方法がかなりオススメです。

ここの判定に苦労していた方は是非試してみてください!

スポンサーリンク
レクタングル(大)
レクタングル(大)

フォローする