중복데이타 삭제 쿼리문 인데 좀더 추가 하고 싶습니다.

중복데이타 삭제 쿼리문 인데 좀더 추가 하고 싶습니다.

QA

중복데이타 삭제 쿼리문 인데 좀더 추가 하고 싶습니다.

본문

sql_query("DELETE FROM g5_write_TEST02 WHERE wr_id not in ( SELECT wr_id from ( SELECT wr_id from g5_write_TEST02 group by wr_subject) as wr_id ) "); 

 

위와 같은 쿼리문을 테스트 해봤는데 중복된 제목글은 잘 지워 줍니다.

 

문제는 

 

WHERE 절을 추가하여 30일 이후의 글만 적용하고 싶은데 이리저리 해도 에러나거나 적용안되네요. 

 

좀더 욕심내서 위와 같이 하면 중복된 글중 오래된것 하나만 남는데요

중복글중 가장 최신글 하나만 남기고 싶으면 order by 를 넣으면 되나요? 어디에 넣어야 하는지...

 

고맙습니다~

 

이 질문에 댓글 쓰기 :

답변 2

중복 내용이 제목 필드에 한정된 것이라면 이렇게 해보면 어떨까요

 

중복된 제목글 중 가장 최신글 하나만 남기기


$sql = " select wr_id from g5_write_TEST02 where wr_subject IN(
    select wr_subject from g5_write_TEST02 group by wr_subject HAVING COUNT(*) > 1
) and wr_is_comment = '0' order by wr_datetime desc "; 
 
$result = sql_query($sql);
for($i=0; $row=sql_fetch_array($result); $i++){
    if($i > 0)
        sql_query(" delete from g5_write_TEST02 where wr_id = '{$row['wr_id']}' ")
}
 

위 쿼리문 not in 은

조건절을 붙이기가 안되거나 까다로운것 같습니다.

해서 아래처럼 작성했는데

아직도 해결 되지 않는것이 있습니다.

 

$query = sql_query (" select wr_subject, count(*) as c from g5_write_TEST02 where wr_name = 'mm' group by wr_subject ");

 

for ($i=0; $row=mysql_fetch_array($query); $i++) {

$new_count = $row['c'] - 1;

sql_query(" delete from g5_write_TEST02 where wr_subject = '{$row['wr_subject']}' order by wr_datetime desc limit $new_count ") ;

}

 

이렇게 했는데

최근글 하나만 남기고 오래된 것부터 중복된것 지우려는데 그게 않되네요,,,

방법이 있나요?


답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

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