現在、私はプレーヤーの最後の転送を一覧表示するオンライン ゲームを作成しています。
プレーヤーの履歴を処理するテーブルには、列 history_join_date と history_end_date があります。
history_end_date が満たされている場合は、プレイヤーがクラブを離れたことを意味し、デフォルト (0000-00-00 00:00:00) のように history_join_date に何らかの日付がある場合は、プレイヤーが (その日付で) クラブに参加したことを意味します。
現在、次のクエリがあります。
SELECT
player_id,
player_nickname,
team_id,
team_name,
history_join_date,
history_end_date
FROM
players
INNER JOIN history
ON history.history_user_id = players.player_id
INNER JOIN teams
ON history.history_team_id = teams.team_id
ORDER BY
history_end_date DESC,
history_join_date DESC
LIMIT 7
ただし、このクエリは次のようなものを返します (上記の PHP でフィルタリング):
(22-Aug-2012 23:05): Folha has left Portuguese Haxball Team.
(22-Aug-2012 00:25): mancini has left United.
(21-Aug-2012 01:29): PatoDaOldSchool has left Reign In Power.
(22-Aug-2012 23:37): Master has joined Born To Win.
(22-Aug-2012 23:28): AceR has joined Born To Win.
(22-Aug-2012 23:08): Nasri has joined Porto Club of Haxball.
(22-Aug-2012 18:53): Lloyd Banks has joined ARRIBA.
PHP フィルター:
foreach ($transfers as $transfer) {
//has joined
if($transfer['history_end_date']<$transfer['history_join_date']) {
$type = ' has joined ';
$date = date("d-M-Y H:i", strtotime($transfer['history_join_date']));
} else {
$type = ' has left ';
$date = date("d-M-Y H:i", strtotime($transfer['history_end_date']));
}
ご覧のとおり、転送順序では、日付は厳密には守られていません (8 月 22 日 => 8 月 21 日 => 8 月 22 日)。
SQL に欠けているものは何ですか?
よろしく!