까만도둑님 질문 중. 여러명 쪽지 보내기에서. 까막도둑님. 한번 보시길... 정보
까만도둑님 질문 중. 여러명 쪽지 보내기에서. 까막도둑님. 한번 보시길...본문
코멘트에 달려고 했는데. 해결 하셨다니. 그냥 지나 치실 것 같아. 새로 글씁니다.
원인을 아셔야, 다음에 유사한 일이 있으면. 바로 할 수있겠죠. 그래서 이해를 시켜 드릴려고 합니다.
memo table 스키마에서
주키 (기본키) me_id 가 잡혀 있더군요.
만약에 me_id 키값이 auto_increment (자동 증가값)으로 설정 되어있으면, 문제가 안되는데요.
참고! 자동으로 하나씩 값이 올라가니. 중복 될 일이 없겠지요.
현재는 자동증가값으로 설정이 안돼어 있습니다.그래서 아래의 코드처럼 수동적으로 키값을 +1 로 증가 시켜서. insert 를 하는데요.
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
루프를 돌릴 시에는 for 문이든, foreach 문이든, $me_id 값이 이미 잡혀 있기때문에. 계속 증가를 할 수없겠지요.
그럼으로, 증가를 시킬시에는 아래 처럼 반복문 안에 들어 가면 되겠습니다.
$okuser=array('test','test1');
$me_id = $tmp_row[max_me_id] + 1;
$userNum = count($okuser);
for( $i=0; $i<$userNum; $i++ )
{
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
$sql = " insert into $g4[memo_table]
set me_id = '$me_id',
me_recv_mb_id = '{$okuser[$i]}',
me_send_mb_id = '$mb_id',
me_send_datetime = '$g4[time_ymdhis]',
me_memo = '{$mb_name}님이 회원으로 가입하셨습니다^^' ";
sql_query($sql);
}
그런데. 반복문 안에서. select로 필드를 구해야 하고, insert 를 새로 입력하는데. 받는 회원 수 많큼, 루프가 돌아가니.
아주 비효율적입니다..
예로 받는 사람이. 10명이면. 10번의 select 문을 구해야 한다 이말입니다.
그러므로,
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
// 여기까지 먼저 구해 놓고. 아래식으로 하면, 되겠지요? (정확히 실험을 하지 않았음으로 어찌 될지는 모르겠습니다만)
//하지만. 좀 더 연구하면. 불필요한, 서버 요청을 안해도 충분히 원하는데로 구할 수 있을 것입니다.
$okuser=array('test','test1');
$me_id = $tmp_row[max_me_id] + 1;
$userNum = count($okuser);
for( $i=0; $i<$userNum; $i++ )
{
$sql = " insert into $g4[memo_table]
set me_id = '$me_id + $i',
me_recv_mb_id = '{$okuser[$i]}',
me_send_mb_id = '$mb_id',
me_send_datetime = '$g4[time_ymdhis]',
me_memo = '{$mb_name}님이 회원으로 가입하셨습니다^^' ";
sql_query($sql);
}
원인을 아셔야, 다음에 유사한 일이 있으면. 바로 할 수있겠죠. 그래서 이해를 시켜 드릴려고 합니다.
memo table 스키마에서
주키 (기본키) me_id 가 잡혀 있더군요.
만약에 me_id 키값이 auto_increment (자동 증가값)으로 설정 되어있으면, 문제가 안되는데요.
참고! 자동으로 하나씩 값이 올라가니. 중복 될 일이 없겠지요.
현재는 자동증가값으로 설정이 안돼어 있습니다.그래서 아래의 코드처럼 수동적으로 키값을 +1 로 증가 시켜서. insert 를 하는데요.
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
루프를 돌릴 시에는 for 문이든, foreach 문이든, $me_id 값이 이미 잡혀 있기때문에. 계속 증가를 할 수없겠지요.
그럼으로, 증가를 시킬시에는 아래 처럼 반복문 안에 들어 가면 되겠습니다.
$okuser=array('test','test1');
$me_id = $tmp_row[max_me_id] + 1;
$userNum = count($okuser);
for( $i=0; $i<$userNum; $i++ )
{
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
$sql = " insert into $g4[memo_table]
set me_id = '$me_id',
me_recv_mb_id = '{$okuser[$i]}',
me_send_mb_id = '$mb_id',
me_send_datetime = '$g4[time_ymdhis]',
me_memo = '{$mb_name}님이 회원으로 가입하셨습니다^^' ";
sql_query($sql);
}
그런데. 반복문 안에서. select로 필드를 구해야 하고, insert 를 새로 입력하는데. 받는 회원 수 많큼, 루프가 돌아가니.
아주 비효율적입니다..
예로 받는 사람이. 10명이면. 10번의 select 문을 구해야 한다 이말입니다.
그러므로,
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
$me_id = $tmp_row[max_me_id] + 1;
// 여기까지 먼저 구해 놓고. 아래식으로 하면, 되겠지요? (정확히 실험을 하지 않았음으로 어찌 될지는 모르겠습니다만)
//하지만. 좀 더 연구하면. 불필요한, 서버 요청을 안해도 충분히 원하는데로 구할 수 있을 것입니다.
$okuser=array('test','test1');
$me_id = $tmp_row[max_me_id] + 1;
$userNum = count($okuser);
for( $i=0; $i<$userNum; $i++ )
{
$sql = " insert into $g4[memo_table]
set me_id = '$me_id + $i',
me_recv_mb_id = '{$okuser[$i]}',
me_send_mb_id = '$mb_id',
me_send_datetime = '$g4[time_ymdhis]',
me_memo = '{$mb_name}님이 회원으로 가입하셨습니다^^' ";
sql_query($sql);
}
댓글 전체

그냥 me_id를 auto_increment로 하는 것이 가장 좋은 방법 같습니다, 리자님 ~~~