[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개
케빈미튼익
12년 전
새롭게 배워갑니다. 감사합니다.
12년 전
사용하지는 않지만 디비억세스 최소화 필수죠 좋아요~!! ^^
12년 전
역시 균이님은 그누보드에서 빛과 같은 분이십니다.
감사합니다.
감사합니다.
12년 전
good!!!
게시판 목록
그누4 팁자료실
그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.
나누면 즐거움이 커집니다.
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 3269 |
|
10년 전 | 6658 | |
| 3268 | 10년 전 | 7179 | ||
| 3267 |
또치하우스
|
11년 전 | 5000 | |
| 3266 |
네이비칼라
|
11년 전 | 5033 | |
| 3265 | 11년 전 | 5151 | ||
| 3264 | 11년 전 | 7039 | ||
| 3263 |
|
11년 전 | 7208 | |
| 3262 |
|
11년 전 | 6644 | |
| 3261 | 11년 전 | 5554 | ||
| 3260 | 11년 전 | 7407 | ||
| 3259 | 11년 전 | 6706 | ||
| 3258 | 11년 전 | 5513 | ||
| 3257 | 11년 전 | 10478 | ||
| 3256 | 11년 전 | 3823 | ||
| 3255 |
언제나해피
|
11년 전 | 7402 | |
| 3254 | 11년 전 | 4983 | ||
| 3253 | 11년 전 | 13092 | ||
| 3252 | 11년 전 | 4748 | ||
| 3251 |
노피노키오
|
11년 전 | 6828 | |
| 3250 |
|
11년 전 | 5811 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기