[1원짜리 팁] 리스트 페이지에서 등록자 정보 효율적으로 추출하기 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[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];
--------------------------------------
한번 쿼리로 리스트에 나오는 모든 등록자의 정보를 가져오는 것이니 대단히 효율적입니다
추천
4

댓글 4개

전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

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