쿼리문과 for문좀 봐주세요...ㅠㅠㅠ

쿼리문과 for문좀 봐주세요...ㅠㅠㅠ

QA

쿼리문과 for문좀 봐주세요...ㅠㅠㅠ

본문

게시판의 카테고리 항목을 수정하여 사용하고 있습니다.

항목을 5가지로 각각 폼을 만들어서 5가지만 쓸 수 있도록 했습니다.

 

항목1 : AAA

항목2 : BBB

항목3 : CCC

항목4 : DDD

항목5 : EEE

 

이렇게요...

그리고 각각 폼을 만들었지만 원래 그누데로 입력형식은 업데이트 파일에서 AAA|BBB|CCC|DDD|EEE 이런식으로 입력하게 합니다.

그러면 항목별로 각각의 이름을 부여할 수 있어서 부여했습니다.

 

 

항목1 : AAA  => name : $chk_pay0

항목2 : BBB  => name : $chk_pay1

항목3 : CCC  => name : $chk_pay2

항목4 : DDD  => name : $chk_pay3

항목5 : EEE  => name : $chk_pay4

 

여기서 안되는 부분은요............

위 항목 1,2,3,4,5 중에서요.. 폼의 내용을 삭제합니다.

예를 들어 항목3의 내용을 지웁니다.

그러면

 

항목1 : AAA

항목2 : BBB

항목3 :

항목4 : DDD

항목5 : EEE

 

이렇게 비게 됩니다. 그리고 저장이 되겠지요... 그럼 저장을 할때에 게시판 테이블을 찾아가서 ca_name가 CCC인 것들을 모두 지우게 되는거죠...

 

제가 열씨미 고안해서 생각한것은요...

 

//지워야 할 테이블에서 ca_name 이름이 항목 3과 같은 것을 찾아 헤아립니다.

$chk_ca2=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '$chk_pay2' ");

 

//만약에 빈칸으로 지워서 보냈다면 update파일에서는 null값이되어서 카운트가 0 으로 될것입니다.

//그럼 카운트가 0 인것은 고로 글쓰기 폼에서 글을 지웠다거나 다른 걸 써넣었다는 뜻이 될것입니다.

 

// 그래서 카운트가 0 인것은 모두 지웁니다.

if($chk_ca2[cnt]==0){

     sql_query(" delete from g4_write_pay where ca_name = '{$chk_pay2}'  ");

   }

 

이렇게해서 작동하도록 for 문으로 만들었습니다..

 

for ($i=0; $i<5; $i++) {

$chk_ca[$i]=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '{$chk_pay[$i]}' ");
if($chk_ca[$i][cnt]==0){

     sql_query(" delete from g4_write_pay where ca_name = '{$chk_pay[$i]}' ");

    }​

 

 

근데... 안지워져요..ㅠㅠㅠㅠ

비 전문가라서요..ㅠㅠ

고수님들 한번 좀 봐주세요...

 

 

 

 

 

 

 

 

 

 

 

이 질문에 댓글 쓰기 :

답변 3

$chk_ca2=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '$chk_pay2' ");

이걸로 카운트를 가져와서 카운트가 0인것만 지운다는거 자체가 잘못된듯 합니다.

ca_name이 $chk_pay2(즉 'CCC')인게 없을때만 지우도록 했으니 지울게 없는셈인거죠.

 

form의 input태그들도 볼 수 있었으면 좋았겠네요.

$chk_pay0~4 값이 폼값으로 넘어온건지 아니면 AAA~EEE 값이 고정으로 들어가있는건지 알 수가 없어서 좀 헷갈립니다.

그냥 폼값으로 넘어온걸 $chk_pay0~4에 넣었다고 생각하고 예제를 짰습니다.

원하시는게 이게 맞을지는 자신이 없네요;;

 


// 기존 ca_name 값들 가져와서 배열에 저장
$ca_arr = array();
$ca_res = sql_query("select ca_name from g4_write_pay group by ca_name ");
while($ca_row = sql_fetch_array($ca_res)) {
    $ca_arr[] = $ca_row['ca_name']
}
 
// $chk_pay0~4 중 일치하는 값을 제외하기
for ($i=0; $i<5; $i++) {
    if(!${'chk_pay'.$i}) continue;
    $key = array_search(${'chk_pay'.$i}, $ca_arr); // 원래값 배열에서 $chk_pay{n} 값 찾기
    if($key!==false) unset($ca_arr[$key]); // 배열에 있으면 지우지 않기위해 배열에서 삭제
}
 
// 남은 값이 폼으로 넘어오지 않은 값이므로 해당값을 삭제
$tmp = implode("', '", $ca_arr);
if($tmp) echo(" delete from g4_write_pay where ca_name in ('$tmp') ");
 

항목3을 지우게되면 $chk_pay2 는 공백이되고 아래의 셀렉트쿼리문은 

 

select count(*) as cnt from g4_write_pay where ca_name = ''

 

이렇게 날라가게 되지 않으신가요?

 

저 쿼리문을 출력해보세요...


그리고 항목이 많지 않다면 이렇게 해보세요.



$sql = delete from g4_write_pay where ";
for($i = 0; $i <= "항목수"; $i++){//항목수는 카테고리 갯수 저장된거 있으시죠? 그거 쓰시면되요.
if($i == 0){
$sql .="ca_name != '".$chk_pay{$i}."' ");​
}else{
$sql .="and ca_name != '".$chk_pay{$i}."' ");​
}
}
echo $sql;
// delete from g4_write_pay where ca_name != 'AAA' and ca_name != 'BBB'​ and ca_name != ''​​ and ca_name != 'DDD'​​ and ca_name != 'EEE'​​​

 

이러면 그냥 있는 ca_name과 공백인 ca_name이 아닌 것만 지워지니깐 BBB라는 ca_name을 가지는 게시글은 지워질꺼에요.

답변을 작성하시기 전에 로그인 해주세요.
전체 10,637
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT