phpMyAdminのSELECT文に付加される「WHERE 1」とは

スポンサーリンク

phpMyAdminでテーブルを選択し「SQL」メニューからSQL文を入力しようとすると、SELECT文の末尾に「WHERE 1」というWHERE句が付いています。

「WHERE 1」の付いたSELECT文

「WHERE 1」の付いたSELECT文

WHERE句はデータを抽出するときの条件で、「WHERE id = 100」(idフィールドが100のデータを抽出)のように使います。

「WHERE 1」は、無条件で全データを返す条件として使われます。

前置きが長くなりましたが、「WHERE 1」は、何も条件を指定せずに実行するSELECT文と同じ結果になります。つまり、

SELECT * FROM `table1` WHERE 1

は、「WHERE 1」を取り除いた次のSELECT文と同じということです。

SELECT * FROM `table1`

「WHERE 1」が邪魔に思える方のために先に書いておくと、「WHERE 1」を削除しても問題ありません

なぜ「WHERE 1」が付加されているのか

「WHERE 1」を付加するメリットは、SELECT文に追加する条件を「AND」で書き始めれば良いということです。

SELECT * FROM `table1` WHERE 1
AND id = 1
AND ag = 30

「WHERE 1」がない場合は、最初の条件は「WHERE」から始める必要があります。

SELECT * FROM `table1` 
WHERE id = 1
AND ag = 30

あまりに簡単すぎてメリットがよくわからないかもしれませんが、編集が楽なのです。たとえば、上記のSQLから「id = 1」の行を削除したい場合は、「AND ag = 30」を「WHERE ag = 30」に変更する必要があります。

SELECT * FROM `table1` 
WHERE ag = 30

「WHERE 1」が付加されている場合は、条件を削除したい場合でも、「AND id = 1」を削除すれば済み、他の行を変更する必要はありません。WHERE句の条件を何度も変更して試行錯誤する場合は、その方が好都合です。先頭にWHEREが付いているかどうか気にせず、条件を編集できるということです。

PHPスクリプトでSQLを組み立てるときも楽

WHEREの先頭が「WHERE 1」になっていると、PHPスクリプトでSQLを組み立てるときも少し楽ができます。たとえば、ANDがいくつか続く次のようなSQLを組み立てるPHPスクリプトを考えてみましょう。

検索キーワードからSQLを組み立てる

検索キーワードからSQLを組み立てる

「WHERE 1」がないので、「先頭はWHEREで始めて、それ以降はAND」のような条件分岐が必要です。

<?php
// 検索キーワード
$keyword = "西沢直木 東京 千駄木";

// SQL
$sql = "SELECT * FROM posts";

// キーワードを空白で分割する
$array = explode(" ", $keyword);

// 分割された個々のキーワードをSQLに反映する
$where = "";
for ($i = 0; $i < count($array); $i++) {
    if ($i == 0) {
        $where .= " WHERE ";
    } else {
        $where .= " AND ";
    }
    $where .= "(contents LIKE '%$array[$i]%')";
}

// 組み立てたSQLを表示する
echo $sql . $where;
?>

○実行結果
SELECT * FROM posts
WHERE (contents LIKE '%西沢直木%')
AND (contents LIKE '%東京%')
AND (contents LIKE '%千駄木%')

これでも問題ありませんが、次のように、WHERE句を「WHERE 1」で始めておけば、「先頭はWHERE、それ以降はAND」という条件分岐が不要です。若干ですがPHPスクリプトもスッキリしたコードになります。

<?php
// 検索キーワード
$keyword = "西沢直木 東京 千駄木";

// SQL
$sql = "SELECT * FROM posts";

// キーワードを空白で分割する
$array = explode(" ", $keyword);

// 分割された個々のキーワードをSQLに反映する
$where = " WHERE 1";
for ($i = 0; $i < count($array); $i++) {
    $where .= " AND (contents LIKE '%$array[$i]%')";
}

// 組み立てたSQLを表示する
echo $sql . $where;
?>

○実行結果
SELECT * FROM posts WHERE 1
AND (contents LIKE '%西沢直木%')
AND (contents LIKE '%東京%')
AND (contents LIKE '%千駄木%')

まとめ

まとめると、「WHERE 1」はSQLの編集を楽にするために仮の条件が付加されているもので、必須ではありません。取り除いても問題はありませんが、PHPスクリプトを効率的に組み立てるコツとしても覚えておきましょう。

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク