sun's longitude:241 43 42.48 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/delete.php:소스보기  

질문과 답변 게시판입니다.

현재 실시간으로 이곳 서버의 설정파일(몇개)를 보여주고 있습니다.
서버의 설정내용에 관한 질문은 먼저 이곳 서버의 설정내용을 참고하시길 바랍니다.

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
 ★ 글 지우기 항목입니다. 한번 더 생각하시고 결정하십시오.!!!
제목 4390 번 글의 답장글 : Re: 한번만더...
 이름  산이 [홈]http://linuxchannel.net/

[김성민]님이 남기신 글:

>안녕하세요.
>답변 감사합니다.
>
>출력은 됩니다만..
>Array
>(
> [3] => 권순구
> [4] => 권용숙
> [5] => 김귀순
> [6] => 김금자
> [7] => 김동현
> [8] => 김미경
> [9] => 김민규
>)
>이런식으로 나오는데 기존 member_list.html 에 해당 쿼리를 주어서
>회원 리스트를 출력하는 html 레이아웃에 끼울려고 합니다.
>
>$not_recent_users = array_diff ($all_users,$recent_users);
>echo '<PRE>';
> print_r ($not_recent_users);
>echo '</PRE>';
>
>echo 문으로 일반 회원 리스트 처럼 이름, 방문일등등 으로 출력하려면...
>
>죄송 합니다. 한번만 더 봐주십쇼~...

========================================


아래 고재두님 의견처럼 응용하시면 됩니다.

table 구조를 보니 SQL 문이 완전히 틀렸네요.
(id 가 UNIQ 하므로 GROUP BY 를 사용하면 안되겠군요)

위의 내용을 구현하는 방법은 여러가지가 있습니다.

문제는 전체 테이블 구조와 회원수(수십만명이면 생각을 달리해야합니다.)
그리고 리스팅하는 알고리즘을 좀 생각해야 합니다.

그 리스트수가 100,200 건이 넘는다면 좀 생각해야 합니다.
즉 다음 페이지로 넘어가는 페이지단위로 또 쪼개어야합니다.

이것은 회원수가 많아지면 절대적으로 그리고 당연히 직면하는 문제입니다.

현재 mysql-3.23.x 이라면 아래와 같이 하면 될겁니다.



## 전체 유저(출석부 명단)
##
function get_all_member_id($table)
{
$users = array();
$sql = 'SELECT id FROM '.$table;

if($result = mysql_query($result))
{
while($row = mysql_fetch_row($result))
{ $users[] = $row[0]; }
@mysql_free_result($result);
}

return $users; // numberic array
}

## (2003-11-01 ~ 2003-11-06) 사이의 방문자 유저
## 기준이 오늘(2003-11-06)의 시각(시간이 아님)이고 5일 전까지이므로
##
function get_recent_user_id($table, $term=5)
{
$users = array();
$term = (int)$term;
$where = date('Y-m-d H:i:s',time()-(86400*$term));
$sql = "SELECT id FROM $table WHERE last_visit > $where";

if($result = mysql_query($result))
{
while($row = mysql_fetch_row($result))
{ $users[] = $row[0]; }
@mysql_free_result($result);
}

return $users; // // numberic array
}

## 최근 5일 동안 방문하지 않는 유저 계산
##
function get_not_recent_userinfo($table, $alluserid, $recentuserid)
{
$userid = $users = array();
$userid = array_diff($alluserid,$recentuserid);

foreach($userid AS $id)
{
$sql = "SELECT * FROM $table WHERE id ='$id'";
if($result = mysql_query($result))
{
while($row = mysql_fetch_assoc($result))
{ $users[$id] = $row; }
@mysql_free_result($result);
}
}

return $users; // associative array
}

$member_table = 'member';

$alluserid = get_all_member_id($table);
$recentuserid = get_recent_user_id($table,5); // 최근 5 일 안에 방문자 모두
$not_visitors = get_not_recent_userinfo($table,$alluserid,$recentuserid);

## 디버깅
echo '<PRE>';
print_r($not_visitors);


---------------

mysql 4.1 이라면 서브쿼리로 날리면 간단한데
3.x 라서 좀 복잡해 보이네요.

직관적으로 코딩한 것이라서 에러가 날 수도 있으니
직접 디버깅해 보세요.
2003년 11월 11일 23:12:07 화(저녁)  from 61.254.75.40
0
암호: 공용 보안 SSL 서버가 준비되기 전까지는 off 합니다

apache lighttpd linuxchannel.net 
Copyright 1997-2024. linuxchannel.net. All rights reserved.

Page loading: 0.01(server) + (network) + (browser) seconds