Php 按百分比排序的查询-两个表中的值

Php 按百分比排序的查询-两个表中的值,php,mysql,Php,Mysql,我有两个具有以下结构的表: 表1:显示玩家的尝试次数 Player_id, n_tries, date Player_id, n_hits, date 表2:显示玩家完成的命中次数 Player_id, n_tries, date Player_id, n_hits, date 最后,我想得到一个玩家今天的命中率(尝试vs命中率),以及从今天到一周前的命中率的增量/减量。我希望结果按(今天)命中率的百分比排序。例如,如果我们有一个id=1的玩家和一个id=2的玩家,则使用以下数据: 表1

我有两个具有以下结构的表:

表1:显示玩家的尝试次数

Player_id, n_tries, date
Player_id, n_hits, date
表2:显示玩家完成的命中次数

Player_id, n_tries, date
Player_id, n_hits, date
最后,我想得到一个玩家今天的命中率(尝试vs命中率),以及从今天到一周前的命中率的增量/减量。我希望结果按(今天)命中率的百分比排序。例如,如果我们有一个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"
我需要最后展示一下:

玩家id百分比命中率(今天),命中率差异(今天与一周前)

我可以通过查询从两个表中获取值:

第一个表-尝试次数:

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_次尝试),因为一个玩家在一天中可以有多行尝试

第二个表-点击次数:

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

要混合这些结果,并能够按照%点击率(今天)排序某种结构,最好的方法是什么?

选择今天和一周前的点击率:

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`;
如果仅在一周前有相应条目时才需要行,则用内部联接替换左侧联接

TRITES表的select看起来是等效的

首先用
player\u id
作为键将结果选择到数组中

$hits_array = array();
$result = mysqli_query(...);
while ($row = mysqli_fetch_assoc($result)) {
    $player = $row['player_id'];
    $hits_array[$player] = $row['hits'];
}
您可以对trytes表执行相同的操作

现在,您可以在player_id键上加入两个数组:

foreach ($hits_array as $player => $hits) {
    echo "$player " . ($hits / $tries[$key]) . "\n";
}

如果我有不同数据库上的表,并且无法进行连接,该怎么办?我正在寻找一个查询后的解决方案…@HommerSmith您在不同的数据库中有Trys和hits表吗?然后必须首先选择,然后在PHP code.Right中执行连接。这其实是我的问题。我看不出如何在PHP中加入这两个结果。@HommerSmith查看修改后的答案。这只是一个粗略的草图,但它显示了原理。这或多或少与SQL中的操作相同,基于一个公共键连接两个结果,在本例中为
player\u id
。我知道您正在尝试做什么,但如果我这样做,我将没有必要的数据来计算今天的点击率与上周的点击率之间的差异。你怎么把它放在结构中?