리스트에서 게시물 등록자의 레벨을 추출한다던가 포인트를 추출한다던가 해서
계급장을 붙인다. 별점을 준다 이런 것이 필요할 때
즉 등록자의 정보를 회원 테이블에서 가져올 때 아래처럼 하는 것을 자주 봅니다
예를들어 등록자별 레벨이 필요할 때
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개
게시글 목록
| 번호 | 제목 |
|---|---|
| 34706 | |
| 34693 | |
| 34563 | |
| 34536 | |
| 34521 | |
| 34480 | |
| 34479 | |
| 34466 | |
| 34437 | |
| 34436 | |
| 34435 | |
| 34406 | |
| 34398 | |
| 34387 | |
| 34382 | |
| 34375 | |
| 34364 | |
| 34336 | |
| 34294 | |
| 34293 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기