출석체크 게시판인데요
0시를 기준으로 1,2,3등 순위을 매겨서 포인트를 차등 지급하고 있습니다.
그런데 경쟁이 생기면서 여러명이 동시에 0시에 출석을 하니까 문제가 있어서 문의드립니다.
1. 디비에 데이터가 생성되는게 순서(? wr_id) 와 맞질 않습니다. 그래서 정말 빠른순으로 등수를 매겼는지 의심이 듭니다.
디비 여분 필드에 기록을 해봤습니다. wr_5가 출석을 클릭하여 $list.skin.php 에 $list[$i]['num'] 값을 넣은겁니다.

2. 구조상 list.skin.php 에서 출석 순위를 매기는게 맞는건지 의구심이 듭니다.
아래는 list.skin.php 에 ' for ($i=0; $i<count($list); $i++) { '코드 안에 삽입한 등수 기록 코드중 일부입니다.
if( $list[$i]['wr_5'] == "" AND substr( $list[$i]['wr_datetime'] , 0, 10 ) == date("Y-m-d") ) {
$p_rank = 0;
$p_day = 0;
$wr_2 = "";
$p_msg_day = "";
$p_msg_rank = "";
$p_msg_event = "";
$wr_5 = $list[$i]['num'];
if( $wr_5 == 1 ) { $p_rank = 300; $p_msg_rank = "1등 +300p " ; sql_query( " UPDATE g5_member SET gold = gold + 1 WHERE DATE(`wr_datetime`) = DATE( NOW() ) AND mb_id = '{$list[$i]['mb_id']}' " ); }
if( $wr_5 == 2 ) { $p_rank = 200; $p_msg_rank = "2등 +200p " ; sql_query( " UPDATE g5_member SET silver = silver + 1 WHERE DATE(`wr_datetime`) = DATE( NOW() ) AND mb_id = '{$list[$i]['mb_id']}' " ); }
if( $wr_5 == 3 ) { $p_rank = 100; $p_msg_rank = "3등 +100p " ; sql_query( " UPDATE g5_member SET bronze = bronze + 1 WHERE DATE(`wr_datetime`) = DATE( NOW() ) AND mb_id = '{$list[$i]['mb_id']}' " ); }
if( $p_msg_rank !="" AND $p_msg_day !="" ) { $p_msg_sp = ' | ' ; }
if( $p_msg_rank =="" AND $p_msg_day =="" ) { $p_msg_sp = ' ' ; } //공백문자
$wr_2 = $p_msg_rank . $p_msg_sp . $p_msg_day . $p_msg_event ;
$sql = "UPDATE {$write_table} SET wr_2 ='$wr_2', wr_5 ='$wr_5' WHERE mb_id = '{$list[$i]['mb_id']}' AND date(wr_datetime)=date(now())";
sql_query($sql);
동시 출석클릭시 일처리? 하는게 맞게 돌아가는건가요? 그렇다면 왜 디비에는 순서대로 기록이 안될까요
답변 4개 / 댓글 5개
WHERE DATE(`wr_datetime`) = DATE( NOW()
==
출석 체크면 건수가 아주 많아질 텐데
이런 조건문을 쓰시면 절대? 안 됩니다. index 사용을 포기하는 방식입니다.
WHERE `wr_datetime` between curdate() and curdate() + interval 1 day-interval 1 second
wr_datetime 컬럼은 적절하고 index에 포함되어 있어야 합니다.
답변에 대한 댓글 4개
'wr_datetime 컬럼은 적절하고 index에 포함되어 있어야 합니다.'
이거 뜻이
적절 = 날짜 필드여야 한다는거고
index에 포함이란건
![]()
여기에 추가 시키란 소린건가요?
답변을 작성하려면 로그인이 필요합니다.
index에 포함되어 있어야 한다는게 무슨 뜻인지 잘 모르겠어요