2011/10/25

【プログラミング】WHERE 1 = 1 って?

タイトル通りです。
学校を出てからというものたまに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」の記述をしておくだけで そういったパラメータの確認などのブロックが必要なくなるのです。 なんて便利 そもそも生のクエリを投げること自体少ないですが、このような記述方法がわかっていれば 複数の条件があったりなかったりする場合に重宝しそうですね。 終わり

0 件のコメント:

コメントを投稿