[이윰] 출석부 랭킹 중복 방지하기

페이지 정보

shadow2fox shadow2fox 3,536 5 4 2019.12.16 17:33:13

본문

출석부 랭킹 중복 방지하기
이윰빌더에서 판매하는 출석부는 그누보드에 정의된 시간상수를 통해 출석시간을 초단위로 DB에 저장하는데 회원들이 동시다발적으로 출석을 하게 되면 중복순위가 나오기 마련이고 그로인해 랭킹 순위와 선착순 순위가 의도치 않는 결과를 야기함으로 출석시간이 밀리세컨드(milliseconds, 천분의 1초) 혹은 마이크로세컨드(microseconds, 백만분의 1초)로 저장되도록 수정해 보자.

아래 예제는 마이크로세컨드(microseconds) 사용시

1. 그누보드5/eyoom/user_program/page/attendance.php를 열어 // 내용글은 텍스트 필터를 검색한다.


수정 전

                $set = "
수정 후

                //밀리세컨드, 마이크로세컨드
                $t_true = microtime(true);
                //$milli = sprintf("%03d",($t_true - floor($t_true)) * 1000);
                $micro = sprintf("%06d",($t_true - floor($t_true)) * 1000000);

                $set = "

atd_datetime = '".G5_TIME_YMDHIS."'를 검색하여 다음과 같이 수정한다.

수정 전

atd_datetime = '".G5_TIME_YMDHIS."'
수정 후

atd_datetime = '".date('Y-m-d H:i:s.'.$micro)."'

atd_datetime` datetime NOT NULL default '0000-00-00 00:00:00',를 검색하여 다음과 같이 수정한다.

수정 전

`atd_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
수정 후

`atd_datetime` datetime(6) NOT NULL default '0000-00-00 00:00:00.000000',

2. 이윰빌더 출석부 attendance.php에 정의된 출석시간(atd_datetime)에 대한 기본 테이블 형식과 기본값을 마이크로세컨드가 적용될 수 있도록 DB관리용 프로그램(phpmyadmin, adminer)이나 커맨드, 터미널 명령어를 통해 g5_eyoom_attendance 테이블의 atd_datetime 컬럼 중 datetime 타입 길이와 기본값을 변경한다.

► 마이크로세컨드 이용시
datetime 길이를 6으로 변경
기본값을 0000-00-00 00:00:00.000000
► 밀리세컨드 이용시
datetime 길이를 3으로 변경
기본값을 0000-00-00 00:00:00.000

상기 소스는 출석부의 랭킹 순서와 연관이 없다.
다만 상기 소스로 정확한 출석 시간을 기록하면 싶다면 적용해 보도록 하자.
그누보드5/eyoom/user_program/page/attendance.php를 열어 // 순위정보 가져오기를 검색한다.

수정 전

                // 순위정보 가져오기
                $rank = sql_fetch("select max(ranking) as max from {$g5['eyoom_attendance']} where atd_datetime like '".$date_day."%'",false);
                $ranking = $rank['max']+1;
수정 후

                // 순위정보 가져오기
                // 랭킹 올바르게
                $rank = sql_fetch("select count(ranking) as rank_no from {$g5['eyoom_attendance']} where atd_datetime like '".$date_day."%' order by atd_datetime asc",false);
                $ranking = $rank['rank_no']+1;

sql_query($sql);를 검색하여 다음과 같이 수정한다.

수정 전

                $sql = "insert into {$g5['eyoom_attendance']} set $set";
                sql_query($sql);
수정 후

                $sql = "insert into {$g5['eyoom_attendance']} set $set";
                sql_query($sql);
추천인 4
  • 012i1052u
    내사랑
  • Choco247
  • 아기곰
  • skyfield4u
    하늘구장
shadow2fox
10
shadow2fox - 회원등급 : 자연/Level 148 - 포인트 : 2,632,264
레벨 148
경험치 3,292,346

Progress Bar 65.2%

- 가입일 : 2015-03-10 12:21:44
- 서명 : 인간에게 가장 큰 선물은 자기 자신에게 기회를 주는 것이다. - 크리스 가드너, Chris Gardner -
- 자기소개 : There's never a shortcut to happiness.

댓글5

shadow2fox님의 댓글

shadow2fox
shadow2fox 글쓴이 2020.01.14 00:08
회원들의 출석 시간 간격이 밀리세컨드(0.001초 ~ 0.009초)의 차이가 날 경우 공동 순위로 DB에 기록이 됩니다. 이는 서버 성능과 연관성이 있는 걸로 추측이 됩니다.

하늘구장님의 댓글

skyfield4u
하늘구장 2019.12.16 17:49
기존 소스가 역시나 문제가 있었나 보네요 요번엔 완벽하기를

내사랑님의 댓글

1/26
012i1052u
내사랑 @하늘구장 2019.12.16 22:31
요번 건 느낌이 좋음요

내사랑님의 댓글

012i1052u
내사랑 2019.06.16 03:09
백만분의 일 확률로 영자님의 의도하는 바와 다른 결과가 나올 수도 있는 거네요 ㅋ~ 꼼꼼하신 영자님

하늘구장님의 댓글

skyfield4u
하늘구장 2019.06.15 12:22
오늘 출석 랭킹이 조금 꼬인 느낌이 나던데 그것 때문에 수정을 보셨나 봐요 퍼가요 ㅎ~

축하합니다. 첫 댓글로 17경험치를 획득하였습니다.

Total 769826 페이지

제목 글쓴이 날짜 조회 추천
제로  🏆 자동링크 개선 루루아빠 2005.06.16 3.4k 0
이윰  댓글+1🏆 게시판 본문 보기시 제목 글자 수 늘리기 루루아빠 2015.08.06 3.4k 0
이윰  🏆 상단바 특정 메뉴 레벨에 따라 감추기 루루아빠 2015.05.22 3.4k 0
이윰  🏆 무한스크롤 사용시 한글로된 분류명을 선택했을때 "IE11"에서 문제점 루루아빠 2015.08.13 3.4k 0
그누•영카트  🏆 영카트 5.2.9.6 패치 루루아빠 2017.11.21 3.4k 0
제로  🏆 💾 업로드된 이미지가 있을때에 게시판 목록에 그림 아이콘 표현하기 루루아빠 2005.07.19 3.4k 0
이윰  🏆 사이드바 없애기 루루아빠 2015.04.22 3.4k 1
그누•영카트  🏆 영카트 5.2.9.3 패치 루루아빠 2017.09.14 3.4k 0
이윰  🏆 특정 Div 클래스 전체를 링크 걸기 루루아빠 2017.04.29 3.4k 0
이윰  🏆 📸 인터넷익스플로어에서 회원가입 폼 '정보공개' 체크 안되는 점 수정 루루아빠 2015.05.29 3.4k 0
이윰  댓글+1🏆 이윰빌더 1.1.1 대응 스킨 패치 루루아빠 2015.05.27 3.4k 0
이윰  댓글+1🏆 이모티콘 크기 바꾸기 루루아빠 2015.07.23 3.4k 0
이윰  🏆 Eyoom Builder 1.1.7 패치 루루아빠 2015.07.06 3.4k 0
제로  댓글+2🏆 php 4.3.0 에서 경고구문 해결법(register_globals=Off) 루루아빠 2005.06.16 3.4k 0
이윰  🏆 1.1.0 패치 후 제목에 쌍따옴표를 넣으면 발생하는 오류 해결책 루루아빠 2015.05.21 3.3k 0
이윰  🏆 모바일에서 btn-e-xs 버튼 크기로 간격 조절 루루아빠 2015.10.09 3.3k 0
이윰  댓글+3🏆 PHP 8.x 지원을 위한 암호화, 복호화 함수 shadow2fox 2021.02.16 3.3k 3
그누•영카트  🏆 자신의 댓글에 댓글이 달리면 본인 댓글 수정 못하는 문제 루루아빠 2015.05.30 3.3k 0
이윰  댓글+1🏆 "부트스트랩" 기반 동영상 반응형 조정하기 루루아빠 2015.09.15 3.3k 0
이윰  🏆 📸 Eyoom Builder 1.3.0 시즌3 루루아빠 2017.11.21 3.3k 0
제로  🏆 회원 가입시 양력 음력 선택하기 루루아빠 2006.05.23 3.3k 0
제로  🏆 여러게시판에서 쓴 게시물을 한개의 게시판에 수시로 복사 루루아빠 2005.09.11 3.3k 0
이윰  댓글+1🏆 일정 레벨 이상만 메뉴 보여주기 루루아빠 2015.03.17 3.3k 0
이윰  🏆 이모티콘을 이윰빌더에 적용하기 위한 규칙 루루아빠 2015.07.23 3.3k 0
기타  🏆 이미지 외곽선 직접 제어하는방법 루루아빠 2005.06.12 3.3k 0
CSS  🏆 webkit-transform 스타일이 마우스 오버시 보이는 flickering 증상 해결하기 루루아빠 2016.05.26 3.3k 0
이윰  🏆 Eyoom Builder 1.1.10 패치 루루아빠 2015.10.06 3.3k 0
HTML5  🏆 Google Drive로 공유된 동영상 Jwplayer를 통해 플레이하기 루루아빠 2015.09.15 3.3k 0
그누•영카트  🏆 영카트 5.2.0 패치 - 네이버페이 추가 루루아빠 2016.07.25 3.3k 0
에디터  댓글+2🏆 CKEditor 4.x 링크 이용 시 rel 속성 noopener, noreferrer, nofollow 자동으로 삽입하기 shadow2fox 2023.10.15 3.3k 2