티스토리 뷰

반응형

회사 웹사이트를 관리하면서 여러가지 mysql 검색 조건을 만들어서 사용하고 있습니다.

Null 인 데이터 조회하기가 생각보다 많이 사용합니다. 단순히 되겠지? 하면서 했던 것이 안되서 몇시간씩 애먹은 기억이 있군요.

특히 날짜로 된 필드값의 Null을 조회하기 위해서 사용했던 방법이 틀린 것이 있지요.

실제 사용한 예를 들어볼게요.

     $common=" where  date(deadline)>=date(now()) and etcassembly_date IS NULL and etc_su>0  order by deadline asc, num desc ";   
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;    

필드 값이 Null 인 데이터를 조회 하기 위해서는 무엇보다도 fields = Null 이 아니라 fields IS Null 을 사용해야 합니다. 
Null 인 데이터 조회하기
데이터를 넣어 놓고 혹시나 Null 값으로 들어간 데이터가 있는지 확인 하기 위해서 조건문을 걸고 조회 하려고 했는데, 필드가 Null 값인 자료는 어떻게 조회하는지 몰라 fields = Null 이라고 조건을 걸고 조회 했습니다.

위와 같은 실수가 가장 많지요.

fields = Null 이라던지 fields=''

이런식으로 프로그램을 짜서 결과값을 보니 계속 데이터가 안나오는 현상이 일어나서... 여기저기 찾아해메다가 찾은 것이 바로

SELECT * FROM TargetTable
WHERE TargetField IS NULL

위와 같은 형식으로 만들어야 합니다.

그럼, Null이 아닌경우를 찾고 싶다면?

SELECT * FROM TargetTable
WHERE TargetField IS NOT NULL

결론적으로는 IS NULL, IS NOT NULL

두가지를 알면 된다는 것입니다.

실제 프로그램을 그리 수정했던 원하던 결과 값이 나왔습니다.

 if($cursort==1) // 납기일 기준 선택시
{
  $common=" where  date(deadline)>=date(now()) and etc_su>0  order by deadline ";  // 출고예정일이 현재일보다 클때 조건
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                            
}              
   if($cursort==2) // 전체 기준 선택시
{
 $sql="select * from mirae8440.ceiling where etc_su>0 order by orderday desc limit $first_num, $scale" ; 
 $sqlcon = "select * from mirae8440.ceiling where etc_su>0 order by orderday desc" ;   // 전체 레코드수를 파악하기 위함.                           
}  
   if($cursort==3) // 레이져 선택시
{
     $common=" where  date(deadline)>=date(now()) and etclaser_date IS NULL and etc_su>0  order by deadline asc, num desc ";  
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                           
}  
   if($cursort==4) // 절곡 선택시
{
  $common=" where  date(deadline)>=date(now()) and etcbending_date IS NULL and etc_su>0  order by deadline asc, num desc ";   
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                           
}  
   if($cursort==5) // 제관 선택시
{
    $common=" where  date(deadline)>=date(now()) and etcwelding_date IS NULL and etc_su>0  order by deadline asc, num desc ";   
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                           
}  
   if($cursort==6) // 도장 선택시
{
        $common=" where  date(deadline)>=date(now()) and etcpainting_date IS NULL and etc_su>0  order by deadline asc, num desc ";   
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;       

   if($cursort==7) // 조립 선택시
{
      $common=" where  date(deadline)>=date(now()) and etcassembly_date IS NULL and etc_su>0  order by deadline asc, num desc ";   
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                           

   if($cursort==8) // 미제작List 선택시
{
  $common=" where  date(deadline)>=date(now()) and etcassembly_date IS NULL and etc_su>0  order by deadline asc, num desc ";  
//  $common=" where etc_su>0   order by deadline asc, num desc ";  
  $sql = "select * from mirae8440.ceiling " . $common;                            
  $sqlcon = "select * from mirae8440.ceiling " . $common;                          
  
}  

이런식으로 사용하면 정말 좋습니다. 수고하셨어요.

반응형
댓글