while 반복중 중복되는 값을 제거하고자 합니다.

while 반복중 중복되는 값을 제거하고자 합니다.

QA

while 반복중 중복되는 값을 제거하고자 합니다.

본문

한번에 100개의 6자리 랜덤난수를 생성하기위해 

while 문을 통해 반복 시켰습니다.

 

1회 반복 후 DB에 있는 100개의 값과 2회차 while 문의 생성 랜덤난수를 비교하여

중복된 값이 있을 경우 멈추는 것이 아닌 중복된 값을 빼고 100개를 생성하여 DB에 입력하려고 합니다.

 


do {
   $rand_num = srand((double)microtime()*1000000); // 등등 랜덤난수 function 을 만들어서 영어대문자와 숫자 조합으로 만들고 있습니다.
   $sql = "select count(*) as cnt from g5_test where rand_num = '{$rand_num}' ";
   $row = sql_fetch($sql);
   $rand_list[$rand_num] = $rand_list;
 
   if($row['cnt']) break; // DB에 있으면 멈춤
 
} while (count($rand_list) < 100);
 
foreach($rand_list as $rand) {
   $sql_insert; // DB에 입력
}

 

코드를 작성하여 테스트 중입니다.

어떻게 하면 중복값에서 멈추지 않고 매 실행 시 마다 중복값을 제외한 후 100개씩 딱 떨어지게 나올 수 있을까요?

도저히 머리가 굴러가지 않아 폭풍 검색 하다 질문 남깁니다.

 

감사합니다.

 

이 질문에 댓글 쓰기 :

답변 3

do {
    
   $rand_num = srand((double)microtime()*1000000); 
   $sql = "select count(*) as cnt from g5_test where rand_num = '{$rand_num}' ";
   $row = sql_fetch($sql);
   
   if ($row['cnt'] == 0)
       $rand_list[] = $rand_num; 

        
} while (count($rand_list) < 100);
 
foreach($rand_list as $rand) {
   $sql_insert; 
}

테이블에 먼저 등록된 값을 100번이나 체크할 이유는 없습니다

아래 코드로 하세요

 

$numArr = range(100000, 999999);//6자리 숫자 전부를 배열에 담으세요
shuffle($numArr); //----배열을 흔들어 주세요

$newArr = array_slice($numArr, 0,100); //100개만 잘라오세요

$numStr ='('. implode("),(", $newArr).')'; //테이블에 기록시 한번에 등록 하도록 합치세요


$insert_qry ="insert into Tablek (wr_1) values $numStr ";
sql_query($insert_qry ); //insert 쿼리는 한번만 하면 됩니다

 

두 분 모두 답변 감사합니다.

 

균이님의 코드의 경우는 DB에 있는것과는 비교 할 수 없는거죠? 2회차 3회차 등 계속 다회차 작성할 경우 매번 100개씩만 새로 만드시는 방법인건가요?

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

회원로그인

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