Php 要显示按月份分组的每周最高得分者详细信息吗

Php 要显示按月份分组的每周最高得分者详细信息吗,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个数据表: id | name | userid | score | date | -------------------------------------------------------- 1 | john | 4 | 233 | 2014-02-02 2 | mary | 5 | 1256 | 2013-02-05 3 | john |

我有一个数据表:

id   |   name   |  userid  |  score   |      date      |
--------------------------------------------------------
 1   |   john   |    4     |   233    |  2014-02-02 
 2   |   mary   |    5     |   1256   |  2013-02-05  
 3   |   john   |    6     |   100    |  2013-03-08 
 4   |   elvis  |    7     |   123    |  2013-03-04 
 5   |   john   |    2     |   1234   |  2013-03-02
我想显示上个月的每周高分详细信息。从周日开始。每周最多显示4名最高分者。我的数据将以json格式输出

目前,我的查询输出仅显示上周的结果

"weekly_winners":[
    {
        "id":"2",
        "score":"1256"
    },
    {
        "id":"1",
        "score":"233"
    }
],
但我想让你看起来像

"weekly_winners":[
    "week":"1"
        [
            {
                "id":"2",
                "score":"1256"
             },
             {
                "id":"1",
                "score":"233"
             }
        ],
    "week":"2"
        [
            {
                "id":"2",
                "score":"1256"
             },
             {
                "id":"1",
                "score":"233"
             }
        ],
],
我目前的查询是:

SELECT winner.id,winner.score
FROM `winner` AS  winner
WHERE winner.date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
    AND winner.date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY 
ORDER BY winner.score DESC
LIMIT 4

您可以使用YEARWEEK命令进行分组。请参见将星期日作为一周的开始

因此,您可以使用:YEARWEEKwinner.date,0来指定周

至于按组选择前N行,我在网站上找到的最好的参考是。向下滚动至以下部分:

从每组中选择前N行

我曾经用这篇文章来解决这个问题

*注:YEARWEEK将通过将指定开始新一周的日期之前的所有日期放入上一年的最后一周来处理新年。。。如你所料

编辑:

下面是一个可能的查询,选择前两个以避免小提琴示例中的大量数据输入:

SELECT winner.id,winner.score, YEARWEEK(winner.date, 0)
FROM `winner` AS  winner
WHERE (
  SELECT count(*) 
  FROM winner as w
  WHERE YEARWEEK(w.date, 0) = YEARWEEK(winner.date, 0) 
        AND w.score >= winner.score
) <= 2;

你能给我举一个例子吗?你应该开始接近你需要的东西/让你足够接近来完成它。添加更多数据并播放。小变挑最高的两个,不是最低的。