2012-05-21 2 views
2

축구 [축구] 앱에서 직접적인 경기 규칙을 적용하는 데 문제가 있습니다. 나는이 tread을 읽었으며 점수 기준, 차이 및 득점 한 득점으로 서기 포지션 테이블을 작성하는 데 매우 열심이었다.주문 풋볼 [soccer] 직통 전화로 위치

하지만 직접 경기로 팀의 위치를 ​​주문 할 수 있는지 알고 싶습니다 :

모습이 위치 테이블 :

Pos Team   Pld W D L F A GD Pts 
1 FC Barcelona 5 2 3 0 8 5 3 9 
2 **Inter Milan** 6 2 2 2 11 10 1 8 
3 *Real Madrid* 6 2 2 2 8 8 0 8 
4 AC Milan  5 0 3 2 8 12 -4 3 

는 인터 밀란과 레알 마드리드에 의해 연결되어 볼 수있는 바와 같이 인테르는 목표 차이 때문에 진짜 마드리드를 향하고있다. 그들 사이에 두 개의 직접 경기를 원하기 때문에이 시간에 레알 마드리드는 인터 밀란이 앞에 있음을

Pos Team    Pld W D L F A GD Pts 
    1 FC Barcelona 5 2 3 0 8 5 3 9 
    2 **Real Madrid** 6 2 2 2 8 8 0 8 
    3 *Inter Milan* 6 2 2 2 11 10 1 8 
    4 AC Milan  5 0 3 2 8 12 -4 3 

주의 사항 : 내가 얻고 싶은 결과는 이것이다.

팀 및 기타 결과 테이블이 있습니다.

가능한 경우 mysql에서 쿼리를 사용하여 이것을 구현하고 싶습니다. 또는 서버 측 (PHP)에서이 작업을 수행하는 것이 더 좋을 수도 있습니다.

감사합니다. 도움을 주시면 감사하겠습니다.

+0

어쩌면 나는 그 데이터를 읽는 법을 모르지만, 실제 마드리드가 중간 밀라노와 직접 대결을 한 것은 어디일까요? 다른 테이블이 관련되어 있습니까? –

+0

예, 죄송합니다. 모든 경기 결과를 바탕으로 서기 포지션을 생성하는 테이블이 있다는 것을 잊어 버렸습니다. 홈 및 방문자 팀의 ID와 각 팀의 득점이 있습니다. 예를 들어 내가 사용했던 트레드와 같습니다. – Henry1988

+0

안녕하십니까 ...하지만이 문제를 해결할 수 있었습니까? 나는 너와 비슷한 시스템을 만들어야 해. 네가 나를 올바른 방향으로 인도 할 수 있다면 기쁠거야. – fjckls

답변

3

이 효율적으로 당신이 그 기준에 포인트 정렬 관계를 요청 결과를 반환 한 쿼리에서 요청하는 일을 하는 것은 불가능합니다.

추론은 간단합니다. 원하는 정렬을 제공하거나 도움이되는 열을 쿼리에서 얻을 수 있다고 가정하십시오. 말하자면 팀은 다른 팀보다 많은 승리를 얻는 포인트에 묶여있는 팀을 주문합니다 (2 개 팀 이상이 그렇게 할 가능성이 높기 때문에).

 | TeamA | TeamB | TeamC 
------------------------------ 
TeamA |  0 | XAB | XAC 
TeamB | XBA |  0 | XBC 
TeamC | XCA | XCB |  0 

그래서 당신은 단지 각 열의 행을 추가하고 제공 할 수 내림차순으로 정렬하는 것입니다 : 당신이 다음과 같이 일치의 양이 그 팀 사이에 원 표시하는 복식 테이블을 필요 손으로 그 계산을 만들려면 당신에게 필요한 데이터.

문제는 실제로을 받기 전에 이 어떤 팀이 연결되어 있는지 알 수 없다는 것입니다. 따라서 일반적인 경우에 해당 열을 작성하면 모든 팀에 대해 모든 팀의 전체 테이블을 작성해야합니다 (작은 작업이 아님). 그런 다음 쿼리에 논리를 추가하여 포인트로 연결된 팀의 열만 추가하십시오. 원래 결과 세트가 필요합니다 (동일한 쿼리로 작성해야 함) 아무리 해도).

단일 쿼리에서 해당 정보를 얻을 수는 있지만 DB에서 너무 무거울 수 있습니다. 나중에이 논리를 코드에 추가하는 것이 더 나을 것입니다. TeamB 또는 TeamC에 대해 TeamA에서 획득 한 게임의 양을 너무 복잡하게 만드는 것이 아니라면 필요한 데이터를 얻는 것이 좋습니다. 쿼리를 작성하는 방법과 실행하는 쿼리의 수를 조심해야합니다. 어쨌든 리그의 처음 몇 경기 동안 당신은 많은 팀이 서로를 묶을 것이므로 데이터를 얻는 것은 전적으로 모든 팀에 대해 예전에 사용했던 전체 더블 - 엔트리 테이블을 만드는 것과 동일합니다 팀.

+0

안녕하십니까 답변을 주셔서 감사합니다, 나는 당신의 권리가 이미 서로 마주 보는 모든 팀과 함께 테이블의 posibility 생각,하지만 난 질문에 넣어하지 않았기 때문에 나는 복잡하지 않고 자신을 설명하는 방법을 이해하지 못했기 때문에 . – Henry1988

+0

이 사람에게 쿠키를주세요! 이미 대답 한 질문에 관심이 덜한 것은 수치 스럽습니다. –

0

임시 저장 프로 시저에서 만들고 프로 시저 호출 ...

create temporary table tab1 (position int not null auto_increment , 
         team_name varchar(200), 
         points int, 
         goal_pt int, 
         primary key(position)); 

insert into tab1(team_name, 
       points, 
       goal_pt) 
    select team_name, 
      points, 
      goal_pt 
    from team  
    order by points desc, 
      goal_pt desc ;