동시에 글 올릴 때 순서 채택완료
출석체크 게시판인데요
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</p>
<p> if( $list[$i]['wr_5'] == "" AND substr( $list[$i]['wr_datetime'] , 0, 10 ) == date("Y-m-d") ) {</p>
<p> $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']}' " ); }</p>
<p> 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']}' " ); }
</p>
<p> 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 ;</p>
<p> $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);</p>
<p>
동시 출석클릭시 일처리? 하는게 맞게 돌아가는건가요? 그렇다면 왜 디비에는 순서대로 기록이 안될까요
답변 4개
WHERE DATE(`wr_datetime`) = DATE( NOW()
==
출석 체크면 건수가 아주 많아질 텐데
이런 조건문을 쓰시면 절대? 안 됩니다. index 사용을 포기하는 방식입니다.
WHERE `wr_datetime` between curdate() and curdate() + interval 1 day-interval 1 second
wr_datetime 컬럼은 적절하고 index에 포함되어 있어야 합니다.
답변에 대한 댓글 4개
https://argc.tistory.com/107
SELECT * FROM [TABLE_NAME] WHERE [DATE_FIELD] = CURDATE();
이게 오늘 데이타라고 나오는데... 어떤 차이가 있나요
참고하세요.
날짜 구하는 함수가 있습니다.
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
https://www.php.net/manual/en/function.date.php
댓글을 작성하려면 로그인이 필요합니다.
'wr_datetime 컬럼은 적절하고 index에 포함되어 있어야 합니다.'
이거 뜻이
적절 = 날짜 필드여야 한다는거고
index에 포함이란건
![]()
여기에 추가 시키란 소린건가요?
답변에 대한 댓글 1개
캡쳐하신 이미지에 보이는 인덱스들에는 wr_datetime이 없으니
아예 인덱스를 활용할 후보조차 안 되는군요.
댓글을 작성하려면 로그인이 필요합니다.
php가 실행되고(이 시각을 저장), 이거 저거 하고 DB에 insert합니다.(wr_id 받아옴)
문제는 이 간격이 고르지 못할 수 있다는 거죠.
기준이 DB냐, php냐에 따라 정하시면 됩니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
index에 포함되어 있어야 한다는게 무슨 뜻인지 잘 모르겠어요