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

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

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

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
1770 번 글의 답장글: Re: 한번만더...
글쓴이: 산이 [홈페이지] 글쓴날: 2003년 11월 11일 23:12:07 화(저녁) 조회: 633

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

>안녕하세요.
>답변 감사합니다.
>
>출력은 됩니다만..
>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 라서 좀 복잡해 보이네요.

직관적으로 코딩한 것이라서 에러가 날 수도 있으니
직접 디버깅해 보세요.

 
이전글 : 한번만더...
다음글 : Re: 지나가다...  
 from 61.254.75.40
JS(Redhands)Board 0.4 +@

한번만더... Re: 지나가다...
인쇄용 


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

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