중복데이타 삭제 쿼리문 인데 좀더 추가 하고 싶습니다.
본문
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 ") ;
}
이렇게 했는데
최근글 하나만 남기고 오래된 것부터 중복된것 지우려는데 그게 않되네요,,,
방법이 있나요?