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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
쿼리문과 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을 가지는 게시글은 지워질꺼에요.

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

회원로그인

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