0

次の構造を持つ2つのテーブルがあります。

表1:プレーヤーが行った試行回数を表示します。

Player_id, n_tries, date

表2:プレーヤーが行ったヒット数を表示します。

Player_id, n_hits, date

最後に、プレーヤーが今日持っているヒットの割合(試行とヒット)と、今日から1週間前までのヒットの増分/減分を取得したいと思います。そして、結果を(今日の)ヒット数の子孫の割合で並べ替えたいと思います。したがって、たとえば、id = 1のプレーヤーと、id = 2のプレーヤーがいる場合、次のデータを使用します。

表1:

1, 10, "2012-10-14"
2, 13, "2012-10-14"
1, 20, "2012-10-7"
2, 15, "2012-10-7"

表2:

1, 5, "2012-11-14"
2, 10, "2012-11-14"
1, 0, "2012-11-7"
2, 3, "2012-11-7"

私は最終的にこれを示す必要があります:

Player_id、ヒット率(今日)、ヒット数の差(今日と1週間前)

2            77%       +233%
1            50%       +100% (actually is infinite -> (5 - 0)/0 )

両方のテーブルから値を取得するためのクエリがあります。

最初の表-試行回数:

SELECT player_id, date, sum(n_tries) 
FROM player_tries 
WHERE (d_date = CURDATE() OR d_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY))
GROUP BY date, player_id
ORDER BY player_id, date

プレーヤーは特定の日に複数行の試行を行うことができるため、sum(n_tries)を実行します。

2番目の表-ヒット数:

SELECT player_id, date, sum(n_hits) 
FROM player_hits
WHERE (d_date = CURDATE() OR d_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY))
GROUP BY date, player_id
ORDER BY player_id, date

したがって、私の質問は次のとおりです。最初のクエリから次のような結果のリストを取得した場合:

Player_id, date,         n_tries
1         2012-11-07        20
1         2012-11-14        10
2         2012-11-07        15
2         2012-11-14        13

そして2番目の表から私はこれを得る:

 Player_id, date,         n_hits
    1         2012-11-07        0
    1         2012-11-14        5
    2         2012-11-07        3
    2         2012-11-14        10

これらの結果を混合し、ヒット率(今日)で順序付けられたある種の構造を持つことができるようにするための最良の方法は何でしょうか?

4

1 に答える 1

0

今日と1週間前のヒットを選択します。

select h1.player_id, `h1.date`,
       sum(h1.hits) as hits_today,
       sum(h2.hits) as hits_last_week
from player_hits h1
left join player_hits h2 on h2.player_id = h1.player_id
                            and `h2.date` = date_sub(`h1.date`, interval 7 days)
group by h1.player_id, `h1.date`;

1週間前に対応するエントリがある場合にのみ行が必要な場合は、左側の結合を内部結合に置き換えます。

trysテーブルのselectは同等に見えます。

まず、結果をplayer_idキーとして配列に選択します。

$hits_array = array();
$result = mysqli_query(...);
while ($row = mysqli_fetch_assoc($result)) {
    $player = $row['player_id'];
    $hits_array[$player] = $row['hits'];
}

trysテーブルでも同じことを行います。

これで、player_idキーの2つの配列を結合できます。

foreach ($hits_array as $player => $hits) {
    echo "$player " . ($hits / $tries[$key]) . "\n";
}
于 2012-11-14T11:24:13.627 に答える