Database

WHERE 1

컨텐츠 정보

본문

phpMyAdmin 을 사용해 데이타를 검색해보니
조건문 앞에 항상 '1' 이 붙어 있더라구요.
어쩨뜬 결과는 같으니까  별 신경안쓰고 사용하다가
어제서야 눈치를 쳇죠.

저만 모른던게 아니였는 지 모르겠네요.


테이블 `AAA` 에
필드 a,b,c가 있을때
검색을 할때

기본적인 쿼리는
SELECT * FROM `AAA`;

`a`에서 'ㄱ'을 찾을땐
SELECT * FROM `AAA` WHERE `a`='ㄱ';

`a`에서 'ㄱ'을 `b`에선 'ㄴ'을 찾을땐
SELECT * FROM `AAA` WHERE `a`='ㄱ' AND `b`='ㄴ';

여기에 "WHERE 1" 을 사용해보면
SELECT * FROM `AAA` WHERE 1 AND `a`='ㄱ' AND `b`='ㄴ';
위것과 동일 한 결과물을 가져 옵니다.

이것을 어떻게 활용하냐 하면..

a,b,c 가 선택적으로 조건이 들어가야 할때
보통은 (적어도 저는) 이런식 입니다.

<?
if($a) {
        if($WHERE) $WHERE .= ' AND ';
        $WHERE .= " `a`='$a' ";
}
if($b) {
        if($WHERE) $WHERE .= ' AND ';
        $WHERE .= " `b`='$b' ";
}
if($c) {
        if($WHERE) $WHERE .= ' AND ';
        $WHERE .= " `c`='$c' ";
}
if($WHERE) {
        $WHERE = 'WHERE '.$WHERE;
}
$Query = " SELECT * FROM `AAA` $WHERE ";
?>

말하고자 하는 "WHERE 1" 을 사용해서 다시 조건절을 생성해 볼게요.

<?
if($a) $WHERE .= " AND `a`='$a' ";
if($b) $WHERE .= " AND `b`='$b' ";
if($c) $WHERE .= " AND `c`='$c' ";
if($WHERE) $WHERE = 'WHERE 1 '.$WHERE;
$Query = " SELECT * FROM `AAA` $WHERE ";
?>

흐, 간단해 졌죠?

-------------------------------------------------------
공간사랑

좋은 생각이네요
좀더 짧게 아래와 같이 코딩하면 안되나요?
<?
if($a) $WHERE .= " AND `a`='$a' ";
if($b) $WHERE .= " AND `b`='$b' ";
if($c) $WHERE .= " AND `c`='$c' ";
$Query = " SELECT * FROM `AAA` WHERE 1 ".$WHERE;
?>

-------------------------------------------------------

tugs

저는 이렇게 씁니다.
-----
$WHERE = array();

if($a) $WHERE[] = " `a`='$a' ";
if($b) $WHERE[] = " `b`='$b' ";
if($c) $WHERE[] = " `c`='$c' ";

$CON = ($WHERE)? "where ".implode($WHERE, " and ") : "";

$Query = " SELECT * FROM `AAA` ".$CON;

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)