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
일이 어려우니까 우리가 감히 손을 못 대는 것이 아니다. 우리가 과감히 손을 대지 않으니까 일이 어려워지는 것이다. (세네카)