获取上个月的所有记录,每个用户一个结果,每个用户最多一列

Get all records from previous month WITH one result per user AND maximum column per user

基本上,我想做的是获取上个月(目前所有论坛)中排名前 x 位的用户。如果有人问过这个问题,我深表歉意,但我已经搜索过但没有找到任何东西。

table结构:

注意:我这里只显示相关栏目,还有更多。

声望

id | given_by | post_id | vote | time_given

1  | 2        | 1       |  1   | 1390763007
2  | 6        | 2       |  -1  | 1390763013
3  | 7        | 2       |  -1  | 1390763013

(下面的table每投票一个条目)

帖子

 id | poster_id  | reputation | posted

1   | 4          |  1         | 1390763013
2   | 3          |  -2        | 1390763013
3   | 8          |  4         | 1390763013
4   | 4          |  5         | 1390763013

还有一个主题table和论坛table,我最终也会介绍。但我真的想让它先简单地工作。

$date = getdate(time());
$time = mktime(0, 0, 0, $date['mon'], 1, $date['year']);

//$sql = "SELECT u.username, u.id, u.group_id, p.reputation FROM reputation AS r LEFT JOIN posts AS p ON r.post_id = p.id LEFT JOIN users AS u ON p.poster_id = u.id WHERE p.reputation > '0' AND p.posted <= :time ORDER BY p.posted DESC";
$sql1 = "SELECT p.id FROM posts AS p WHERE p.id = :id";
$ps1 = $pdo->prepare($sql);

$sql = "SELECT r.post_id FROM reputation AS r WHERE r.time_given >= :time ORDER BY r.time_given DESC";
$ps = $pdo->prepare($sql);
$ps->execute(array(':time'=>$time));
$ps->setFetchMode(PDO::FETCH_ASSOC);
foreach ($ps as $reputation)
{
    print_r($reputation);
    $ps1->execute(array(':id'=>$reputation['post_id']));
}

第一个查询有效,但它会多次显示发帖者 ID,例如,如果他们在过去一个月内获得了不止一点的声誉。不知何故,我需要一个函数来对函数变量求和,它将把帖子 table 中海报 x 的所有声誉加起来,不再有相同海报的行,仅显示正面声誉并按声誉按降序分组 - 所以上面 table 中的示例应该从 MySQL:

看起来像这样
poster_id | reputation

 4        | 6
 8        | 4

这是我正在努力解决的分组部分,我可以通过 PHP 来完成,但我更愿意通过 MySQL 来完成,并且只需要循环遍历结果。

我宁愿在一个查询中使用它,但最多两个。

您可以对 table 中的字段进行计算。您只需要按 select 中的其他项目分组,如下所示:

SELECT poster_id, sum(reputation) as reputation
FROM posts
group by poster_id