タイトル通りです。 学校を出てからというものたまにSQLを組み立てている箇所に遭遇します。 そこで、「WHERE 1 = 1」という記述に度々出会います。 大抵が複数条件のSQL文を構築している箇所なのですが、なぜ「WHERE 1 = 1」という 記述があるのか、前々から不思議でした。 ですので、少し時間があったので調べて見ました。 まず、「WHERE 1 = 1」はすべての条件が 「true」 になります。 何があっても通るよってことですね。 次にループでクエリを追加するブロックがあります。 そこでは、下記のようにWHERE句に条件が追加されています。 こんな感じのやつですね。<?php $param = array( 'id' => 1, 'name' => 'test', ); $sql = sql($param); function sql($param) { $sql = 'SELECT'; $sql .= ' *'; $sql .= 'FROM'; $sql .= ' EMP'; $sql .= 'WHERE'; $sql .= ' 1 = 1'; foreach ($param as $key => $val) { $sql .= 'AND'; $sql ,= $key . " = '" . $val . "'": } return $sql; }するとこのようなSQLが出来上がると思います。SELECT * FROM EMP WHERE 1 = 1 AND id = '1' AND name = 'test'これだとただ単にSQL文が出来上がるだけなのですが、 この記述方法のいいところは別にあります。 それは、WHERE句が複数か、ひとつしか無い場合です。 この場合、通常ならWHERE句のパラメータのある無しを判定し、一つめのWHERE句と 一つめ以降のWHERE句で処理をわけなければなりません。 ですが、上の関数のように「WHERE 1 = 1」の記述をしておくだけで そういったパラメータの確認などのブロックが必要なくなるのです。 なんて便利 そもそも生のクエリを投げること自体少ないですが、このような記述方法がわかっていれば 複数の条件があったりなかったりする場合に重宝しそうですね。 終わり
2011/10/25
【プログラミング】WHERE 1 = 1 って?
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿