WHERE 1
컨텐츠 정보
- 15,292 조회
- 32 추천
- 목록
본문
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;
조건문 앞에 항상 '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
등록된 댓글이 없습니다.