회원 삭제 시 정보가 완전하게 삭제하도록 수정을 하였습니다.
회원 삭제 후 mb_no 번호가 중간중간 비어 있는데, 혹시 삭제할 때마다 번호를 재정렬하는 방법이 있을까요?
3번을 지우면 4번 부터 3, 4, 5... 이렇게
고수님들 답변 부탁 드립니다.
감사합니다.
답변 3개
<?php
include_once('./common.php'); // 그누보드 환경 포함
// 관리자 체크
if (!$is_admin) {
die("관리자만 실행할 수 있습니다.");
}
// 트랜잭션 시작 (InnoDB인 경우 유효)
sql_query("START TRANSACTION");
$sql = "SELECT mb_id FROM g5_member ORDER BY mb_no ASC";
$result = sql_query($sql);
$new_no = 1;
$map = [];
// 1단계: mb_no를 중복 피하기 위해 임시 음수 번호로 먼저 설정
while ($row = sql_fetch_array($result)) {
$mb_id = $row['mb_id'];
$temp_no = -$new_no; // 예: -1, -2, -3 ...
sql_query("UPDATE g5_member SET mb_no = '{$temp_no}' WHERE mb_id = '{$mb_id}'");
$map[] = ['mb_id' => $mb_id, 'new_no' => $new_no];
$new_no++;
}
// 2단계: 임시 번호 → 실제 번호로 재설정
foreach ($map as $m) {
sql_query("UPDATE g5_member SET mb_no = '{$m['new_no']}' WHERE mb_id = '{$m['mb_id']}'");
}
sql_query("COMMIT");
echo "? mb_no 재정렬 완료! 총 {$new_no} 명 처리됨.";
?>
해당은 고유로 자동 증가라서 그렇게 하고 싶으시면 따로 번호를 하나 만드시고 관리를 하는게 나으실거 같습니다. 처리하는 방법은 따로 만든 번호를 만약 번호 5면 5이상인 6부터 하나씩 빼는 쿼리를 만드시면 될 거 같습니다.
sql 에서 쿼리보면 맨뒤에 정렬 쿼리 넣어서 order by 고유번호 desc
답변을 작성하려면 로그인이 필요합니다.