3

サッカー[サッカー]アプリで直接試合に関するルールを適用しようとすると問題が発生します。私はこのトレッドを読みました、そしてそれはポイント基準、違いと得点されたゴールによって立っているポジションテーブルを作成することに非常に多忙でした。

しかし、私は直接の試合でチームのポジションを注文することが可能かどうか知りたいです:

この位置表を見てください:

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

今回は、レアル・マドリードがインテル・ミランの前にいることに注意してください。これは、レアル・マドリードが2つの直接試合に勝ったためです。

チーム用のテーブルと結果用のその他のテーブルがあります。

可能であれば、mysqlのクエリを使用してこれを達成したいと思います。または、サーバー側(PHP)でこの順序付けを行う方がよいかもしれません。

助けていただければ幸いです。

4

2 に答える 2

3

要求した結果を返す単一のクエリで要求したことを効率的に実行し、その基準でポイントにタイ並べ替えることは不可能です。

理由は簡単です。必要な種類の並べ替えを提供または支援する列をクエリで取得できると仮定します。つまり、1つが他のチームよりも多くの勝利を収めているポイントで結ばれているチームを注文します(これは2つ以上のチームで発生する可能性が非常に高いため)。手作業でその計算を行うには、次のようにそれらのチーム間で勝った試合の量を示す複式簿記が必要になります。

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

したがって、各列の行を合計すると、降順で並べ替えると、必要なデータが得られます。

問題は、実際にデータを取得する前に、どのチームが結びついているかわからないことです。したがって、一般的なケースでその列を作成するということは、すべてのチームに対してすべてのチームのテーブル全体を作成する必要があることを意味します(これは小さな作業ではありません)。次に、ロジックをクエリに追加して、チームの列を、ポイントで関連付けられている列に対してのみ追加する必要があります...元の結果セットが必要です(同じクエリで作成する必要があります)とにかく)。

単一のクエリでその情報を取得することは可能かもしれませんが、それは確かにDBでは非常に重くなります。後でコードにそのロジックを追加して、必要になることがわかっているデータを取得することをお勧めします(TeamAがTeamBまたはTeamCに対して勝ったゲームの量を取得することはそれほど複雑ではありません)。それでも、そのクエリを作成する方法と実行する数に注意する必要があります。結局のところ、リーグの最初の数試合では、多くのチームが互いに結びついているため、データを取得することは、すべてのチームに対して前に例として使用した複式簿記全体を作成することと実質的に同じになります。チーム。

于 2012-05-21T22:49:18.107 に答える
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 ;
于 2014-12-22T09:39:37.103 に答える