我有两个具有以下结构的表:
表1 :显示玩家已完成的尝试次数。
Player_id, n_tries, date
表2 :显示玩家完成的点击次数。
Player_id, n_hits, date
最后,我希望玩家拥有今天的命中率(尝试次数与命中率)以及今天和一周之前命中的增量/减量。而且我希望结果按照(今天)击中后代的百分比排序。因此,例如,如果我们有一个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,%命中(今天),点击次数差异(今天与一周前相比)
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
我做了一个总和(n_tries),因为玩家可以在特定的一天有多行尝试。
第二张表 - 点击次数:
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
从第二张桌子我得到了这个:
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
能够混合这些结果并能够使用%命中(今天)排序的某种结构的最佳方法是什么。?
答案 0 :(得分:0)
从今天和一周前选择点击次数:
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`;
如果您只想在一周前有相应的条目时想要行,那么用内连接替换左连接。
try表的选择看起来相当。
首先将结果选择为以player_id
为键的数组。
$hits_array = array();
$result = mysqli_query(...);
while ($row = mysqli_fetch_assoc($result)) {
$player = $row['player_id'];
$hits_array[$player] = $row['hits'];
}
您对尝试表也这样做。
现在您可以在player_id键上加入两个数组:
foreach ($hits_array as $player => $hits) {
echo "$player " . ($hits / $tries[$key]) . "\n";
}