0

現在のシーズンのチームのすべてのプレーヤーを見つける次のステートメントがあります。選手はハンディキャップ順。ハンディキャップが同じ場合は、最も古い順に並べられadded_dateます。つまり、新しいメンバーはリストの下の方に表示されます。

SELECT players.playerid_p,
       players.fname, 
       players.sname, 
       players.tel, 
       players.mob, 
       players.email,
       season_players.captain 
FROM season_players 
     LEFT JOIN players ON (season_players.playerid_f = players.playerid_p)
     LEFT JOIN handicaps ON (handicaps.playerid_f = players.playerid_p)
WHERE season_players.seasonid_f = '$currentSeason'
      AND season_players.teamid_f = '".$row["teamid_p"]."'
GROUP BY players.playerid_p
ORDER BY handicaps.handicap ASC, handicaps.added_date ASC

テーブルには、handicapsプレーヤーごとに、レビューの複数のエントリを含めることができます。

注文に使用する最新のハンディキャップを作成する方法がわかりません (added_date の MAX と何か関係があるのでしょうか?) 同時に、2 つ以上のハンディキャップが同じ場合、最も古い登録順に並べ替えます。 added_date。

4

2 に答える 2

0

現在のクエリでニーズを満たす方法を理解しようとする代わりに、別のテーブルを作成するオプションではないでしょうか。たとえば、player_idと最新のレビューの必要な情報のみを格納する「Handicaps_latest」などです。これを行う理由は、プレイヤーに関する情報(select句の列)を取得しようとしているだけで、ハンディキャップテーブルから実際に必要なものは何もないためです。この場合、プレーヤーごとに複数のエントリがあるハンディキャップテーブルは、参加するのに適したテーブルではない可能性があります。ただし、これらのデータが他のロジックで必要になる可能性があることを考慮すると、それらをそのままにして、最新のレビューデータのみを格納する新しいブランチテーブルを作成することもできます。ただし、明らかに追加の作業が必要です。つまり、元のハンディパステーブルに新しいエントリを挿入するたびに、

于 2013-01-30T00:21:13.923 に答える
0
SELECT x.*
  FROM my_table x
  JOIN 
     ( SELECT id,MAX(other_column) max_other_column FROM my_table GROUP BY id) y
    ON y.id = x.id
   AND y.max_other_column = x.other_column;
于 2013-01-30T00:39:16.453 に答える