[1원짜리 팁] 리스트 페이지에서 등록자 정보 효율적으로 추출하기 정보
[1원짜리 팁] 리스트 페이지에서 등록자 정보 효율적으로 추출하기본문
리스트에서 게시물 등록자의 레벨을 추출한다던가 포인트를 추출한다던가 해서
계급장을 붙인다. 별점을 준다 이런 것이 필요할 때
즉 등록자의 정보를 회원 테이블에서 가져올 때 아래처럼 하는 것을 자주 봅니다
예를들어 등록자별 레벨이 필요할 때
for($i=0; $i<count($list); $i++){
$level=get_member($list[$i][mb_id], 'mb_level');
~~
~~
echo $level[mb_level];
-----------------------------------
개발하다보면 이런 기능이 자주 쓰이게 됩니다
간단해 보이기도 하고 위와 같이 해서 안 될 것이야 없지만
그누 기본설정 대로 목록수가 15개면 15번 디비를 쿼리하게 되겠습니다
10명이 접속한다면 리스트 페이지 하나를 볼 때 150번의 디비 쿼리가 추가로 발생한다는 얘기죠
이것은 대단히 비효율적이고 느려지게 만드는 방법이 되겠습니다
목록수를 20개, 30개 이상으로 사용하고 있다면 서버 입장에서는 끔찍한 일입니다
------------------------------------
한번만 쿼리를 하면 되는 방법입니다 (list.skin.php 상단에 추가)
--요령은 리스트에 나오는 회원 아이디를 모아서 한번에 쿼리한 다음
아이디별로 자신의 레벨이나 포인트 등의 필요정보를 배열에 담아 둡니다
for($i=0; $i<count($list); $i++) if($list[$i][mb_id]) $tmpArr[]=$list[$i][mb_id];
if($tmpArr[0]){ //등록자 아이디가 있으면
$tmpArr =array_unique($tmpArr); //같은 등록자는 한번만
$idStr="'".implode("','", $tmpArr)."'";
$result=sql_query("select mb_id, mb_level, mb_point from $g4[member_table] where mb_id IN($idStr)");
while($row=sql_fetch_array($result))
$level[$row[mb_id]]= $row[mb_level];
//포인트가 필요하면 $point[$row[mb_id]]= $row[mb_pointl];
}
목록 출력에서
for($i=0; $i<count($list); $i++){
$tmpid=$list[$i][mb_id]
~~
~~
echo $level[$tmpid];
--------------------------------------
한번 쿼리로 리스트에 나오는 모든 등록자의 정보를 가져오는 것이니 대단히 효율적입니다
계급장을 붙인다. 별점을 준다 이런 것이 필요할 때
즉 등록자의 정보를 회원 테이블에서 가져올 때 아래처럼 하는 것을 자주 봅니다
예를들어 등록자별 레벨이 필요할 때
for($i=0; $i<count($list); $i++){
$level=get_member($list[$i][mb_id], 'mb_level');
~~
~~
echo $level[mb_level];
-----------------------------------
개발하다보면 이런 기능이 자주 쓰이게 됩니다
간단해 보이기도 하고 위와 같이 해서 안 될 것이야 없지만
그누 기본설정 대로 목록수가 15개면 15번 디비를 쿼리하게 되겠습니다
10명이 접속한다면 리스트 페이지 하나를 볼 때 150번의 디비 쿼리가 추가로 발생한다는 얘기죠
이것은 대단히 비효율적이고 느려지게 만드는 방법이 되겠습니다
목록수를 20개, 30개 이상으로 사용하고 있다면 서버 입장에서는 끔찍한 일입니다
------------------------------------
한번만 쿼리를 하면 되는 방법입니다 (list.skin.php 상단에 추가)
--요령은 리스트에 나오는 회원 아이디를 모아서 한번에 쿼리한 다음
아이디별로 자신의 레벨이나 포인트 등의 필요정보를 배열에 담아 둡니다
for($i=0; $i<count($list); $i++) if($list[$i][mb_id]) $tmpArr[]=$list[$i][mb_id];
if($tmpArr[0]){ //등록자 아이디가 있으면
$tmpArr =array_unique($tmpArr); //같은 등록자는 한번만
$idStr="'".implode("','", $tmpArr)."'";
$result=sql_query("select mb_id, mb_level, mb_point from $g4[member_table] where mb_id IN($idStr)");
while($row=sql_fetch_array($result))
$level[$row[mb_id]]= $row[mb_level];
//포인트가 필요하면 $point[$row[mb_id]]= $row[mb_pointl];
}
목록 출력에서
for($i=0; $i<count($list); $i++){
$tmpid=$list[$i][mb_id]
~~
~~
echo $level[$tmpid];
--------------------------------------
한번 쿼리로 리스트에 나오는 모든 등록자의 정보를 가져오는 것이니 대단히 효율적입니다
추천
4
4
댓글 4개
새롭게 배워갑니다. 감사합니다.
사용하지는 않지만 디비억세스 최소화 필수죠 좋아요~!! ^^
역시 균이님은 그누보드에서 빛과 같은 분이십니다.
감사합니다.
감사합니다.
good!!!