0
 829   42   8
  View Articles

Name  
   오석진  (2004-04-27 13:00:14, Hit : 7048, Vote : 1259)
Subject  
   오랜만에 질문드립니다.
야구기록실 관련해서 여러가지 질문드렸던 사람입니다.
손병목님과 두리뭉실님 덕분에 성공했습니다.^.^ 지금 칭찬이 자자합니다.
잘만들었다고요.. 감사드립니다.

기록정렬과 관련되어서 질문이 있어서 글을 남깁니다.

http://www.yagootj.com/record_batter/list_batter.php

질문1. 누적타율계산시 소수점 3자리까지 표시하려면...========================================
ab->타수 hit->안타

$query="select sum(ab) as s_ab,sum(hit) as s_hit,sum(hit)/sum(ab) as s_hra from $tablename  ".$que_league." ".$and." ".$que_team1." GROUP BY name,team1,league order by $select_arrange_s $desc limit $offset, $list_num";

이러케하니까 s_hra값이 소수점 두자리값으로 정해져 버리더라구요.
$s_hra = (number_format($array[s_hra],3));
이변수를 추가해도 세자리소수점은 0으로표시가됩니다.

그래서 sum(hit)/sum(ab) as s_hra을 없애고
$s_hra = (number_format($array[s_hit]/$array[s_ab],3)); 를 넣으면
소수점 3자리까지 정상표시되긴하는데, s_hit하고 s_ab값이 0 인 선수는

Warning: Division by zero in /home/triple/yagootj/record_batter/list_batter.php on line 339

이런식으로 계산오류라고 뜨더군요.
계산오류도 안뜨게 하고 소수점 3자리까지 표시되게 하는방법이 없을까요?

질문2.-==================================================================================
기록을 s_hra 에 의해 정렬시켰는데, s_ab 값과 s_hit값이 0인 선수가 최상위로 정렬이 되더군요. 아마 0/0 이면 무한대가 표시되서 그런거 같은데 해결방법은 없는지요.

질문3. 정렬순서의 복수지정..===============================================================
현재 초기정렬값이  s_hra입니다. 이때 s_hra 값이 같은 두선수가 있을땐 s_hit값이 더큰 선수를 상위 정렬시키고자 합니다.

즉.-----s_ab    s_hit    s_hra
강호동   12         6        0.500
유재석   10         5        0.500

s_hra값이 같으면 s_hit값이 큰선수를 상위정렬시키려고합니다.
  
질문4. 규정타수 우선정렬===================================================================
3번질문과 비슷한 내용이 될것 같은데요.
s_ab값이 정해진 숫자(규정타수-변수처리) 이상인 선수를 우선적으로 정렬한다음, 정해진숫자이하인 선수를 그이하로 정렬하는방법은 없는지요.

질문5. 순위 매기기=========================================================================
이건 제가 해봐서 순위매기기는 가능했는데.. 순서대로 그냥 주욱---1,2,3,4,---이러케 됬습니다.
이러케 변수처리 했거든요
$no=0;
$no=$no+1;

http://www.yagootj.com/record_result/list_rank.php?league=4

승률에 의해 정렬시키로 그에 따라 순위를 부여했는데요.

승률이 같으면 같은순위가 표시되게 하려고 합니다.

순위   팀     승률 ----
1       A      1.000
1       B      1.000
1       C      1.000
4       D       0.900      
4       E       0.900
6       F        0.800

이런식으로 표현되게 하려고 합니다.
어떻게 해야 할런지요..
=========================================================================================
오늘 너무 많은 질문을 드렸네요.. 그동안 혼자서 끙끙대다가 너무 안풀려서 도움을 구합니다. ^.^
항상 친절한 답변 감사드립니다 꾸벅

손병목
먼저, 질문 1번요.
select sum(ab) as s_ab,sum(hit) as s_hit,sum(hit)/sum(ab) as s_hra..... 에서
sum(hit)/sum(ab) 부분을 round(sum(hit)/sum(ab),3)와 같이 바꿔보세요. 아마 될 겁니다.
 2004/05/04 09:35:13    

손병목
질문 2는, 이해가 잘 안됩니다.
0타수 0안타의 값은 엄격하게 말하면 오류인데, 실제 s_hra값에는 NULL 값이 입력됩니다. 따라서 NULL의 값은 0보다 작게 취급되어, 내림차순으로 정렬하면 가장 낮게, 올림차순으로 정렬하면 가장 높게 표시됩니다.
제가 테스트해본 결과 그렇습니다.
 2004/05/04 09:46:48    

손병목
질문 3은 간단합니다.
s_hra 기준으로 내림차순, s_hit 기준으로 내림차순을 동시에 적용하면 됩니다.
ORDER BY s_hra DESC, s_hit DESC 라고 하면 됩니다.
 2004/05/04 09:49:38    

손병목
질문 4는 3번 답변을 보고 응용해 보시면 될 것 같네요.  2004/05/04 09:50:42    

시디맨
질문 1,3번은 해결됬습니다. 정말 너무너무 감사합니다. ^.^

질문 2의 경우
http://www.yagootj.com/record_batter/list_batter.php?league=2 의 경우입니다. 0타수 0안타의 선수가 가장위에 정렬이 됩니다.
$query="select 중략 name,sum(ab) as s_abi,sum(hit) as s_hit,round(sum(hit)/sum(ab),3) as s_hra 중략 from $tablename ".$que_league." ".$and." ".$que_team1." GROUP BY name,team1,league order by $select_arrange_s desc, s_hit DESC limit $offset, $list_num"; // SQL 쿼리문

$select_arrange_s 의 변수처리는 다음과 같이 했습니다.
if($select_arrange_s=="") {$select_arrange_s="s_hra";}
====================================================
5번질문에 대한 답도 부탁드립니다.^.^
항상 감사합니다.
 2004/05/05 00:38:26    

손병목
질문 5에 대한 답이 좀 늦었네요. 죄송합니다.

이건 설명이 좀 복잡합니다. 배열을 이용해야할 것 같네요.

만약 승률의 값이 $현재승률에 저장된다고 가정합니다. 지난 승률,즉 바로 전의 승률은 $승률에 저장된다고 가정하구요.
순위는 $grade 배열변수를 사용합니다(현재는 $no를 사용했죠?). 대신 $no는 첨자로 사용합니다.
$no는 단순한 순서만을 나타냅니다. 따라서 $grade[1]이면 첫번째 값의 순위라는 뜻이죠. 이건 당연히 1이 되겠죠.
$grade[2]는 두번째 순위라는 뜻인데, 이것은 2가 될 수도 있고 첫번째 값과 동일하면 1이 될 수도 있는 겁니다.

예를 들어, 만약 $no가 1이면

$grade[$no] = $no ; // → $grade[1] = 1; 과 동일한 뜻입니다.

승률이 모두 다르다면,

$grade[2] = 2
$grade[3] = 3 과 같이 진행되겠지만,

만약 네번째 승률이 세번째 승률과 동일하다면
$grade[4] = 3 과 같이, 네번째 순위($grade[4])에도 전순위(3)의 값이 저장되어야 합니다.

이것을 코딩하면 대략 다음과 같습니다.


$no = 1;

while(...) { // 반복문 시작
$현재승률 = 현재승률;
if($현재승률 == $승률) {
$grade[$no] = $grade[$no-1];
} else {
$grade[$no] = $no;
}
$승률 = $현재승률;
$no = $no+1;
} // 반복문 끝

뭐가 좀 빠진 것 같지만, 하여튼 순위를 배열에 저장시키면서, 이전의 값과 비교해야 하는 것은 맞습니다.
한번 시도해보세요...
 2004/05/05 17:38:51    


no
subject
name
date
hit
*
689
  쿼리에 대하여

김현숙
2002/08/13 6535 1234
688
  [사무자동화]엑세스-질문입니다. [1]

유종원
2003/09/19 7188 1234
687
  기초수준의 질문.. 이지만 .. 꼭 답변 ... [2]

맨땅 해딩
2004/06/23 7144 1234
686
  광고성 글 방지 팁에 대해서 질문이요 [9]

이국진
2004/10/24 7281 1234
685
  시험자격

대한민국
2002/07/22 6601 1235
684
  [질문] 빈공간있는 표 채워넣는법... [2]

픽셀이
2003/07/23 6311 1235
683
  ㅈ ㅓㄱ ㅣ ㅇ ㅕ

소영
2002/08/03 6493 1237
682
  Q 비베질문 여러 가지

김b
2002/07/25 6979 1239
681
  [jsp] 톰캣버젼이...? [1]

신창원
2004/01/10 7011 1240
680
  PHP 게시판 만들기 list.php 중에

Ziwoogae
2003/01/07 7546 1243
679
  비주얼 베이직 두번째로 질문 드린거여 ... [1]

고세화
2004/04/22 6931 1245
678
  에고 또 질문이요-- [1]

바투
2003/05/28 6331 1246
677
  게시판을 만드는 과정에 있어서의 한가지... [3]

++web dang++
2003/06/24 7613 1246
676
  PHP게시판 인스톨은... [2]

김정인
2003/11/08 6514 1246
675
  안녕하세요. 또 이정훈입니다. [2]

이정훈
2004/09/06 7188 1247
674
  이건 뭐에 쓰는거에요? [1]

바투
2003/05/21 6424 1248
673
  PHP 입력폼을요... [1]

김정인
2003/11/10 7120 1248
672
      감사합니다...그런데..

조인숙
2002/08/10 6594 1253
671
  387번에 대한 답변이 없어서.. [3]

박상은
2003/07/13 6508 1253
670
  답변형게시판에 대해서 질문..^^ [3]

이경진
2004/02/25 7442 1253
[1][2][3][4][5][6][7] 8 [9][10]..[42] [next]

Copyright 1999-2021 Zeroboard / skin by Zetyx