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

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

QA

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

답변 3

본문

한번에 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개씩만 새로 만드시는 방법인건가요?

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 123,622
© SIRSOFT
현재 페이지 제일 처음으로