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
유쾌한 사람은 자기 일에만 몰두하는 사람이 아니다. 때론 자신의 일을 전부 제쳐놓고 타인의 문제에 전력을 쏟는 열정이 있는 사람이다. 타인에게 자신의 힘을 나누어주고 마음을 열어주는 것은 자신의 삶을 행복하게 만드는 방법이다.