Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于按列排序的MySQL查询_Php_Mysql_Sql - Fatal编程技术网

Php 用于按列排序的MySQL查询

Php 用于按列排序的MySQL查询,php,mysql,sql,Php,Mysql,Sql,我正在用php运行一个查询,该查询提供以下格式的表: +--------------------------------------------------------------------------+ | Name cc Platform Playcount Date | +--------------------------------------------------------------------

我正在用php运行一个查询,该查询提供以下格式的表:

+--------------------------------------------------------------------------+
|   Name               cc          Platform         Playcount      Date    |
+--------------------------------------------------------------------------+
| The Godfather      IN           Web              20000            20140701 |
| The Godfather      IN           Mob              210            20140701 |
| The Godfather      US           Web              221            20140701  |
| The Godfather      US           Mob              1200            20140701 |
| Pulp Fiction      IN           Web              1300            20140701  |
| Pulp Fiction      IN           Mob              20            20140701  |
| Pulp Fiction      US           Web              222            20140701   |
| Pulp Fiction      US           Mob              100            20140701  |
| Fight Club      IN           Web              2002            20140701    |
| Fight Club      IN           Mob              2100            20140701    |
| Fight Club      US           Web              2           20140701     |
| Fight Club      US           Mob              1000            20140701    |
+--------------------------------------------------------------------------+
问题是,我需要按总播放次数对它们进行排名。也就是说,教父显然是这个表中总玩数最多的。在排名之后,我需要选择播放次数最多的20部电影,相应的4行必须输入到一个单独的表中

我如何进行排序以获得总数,然后将与之对应的所有四行插入到一个新表中

因此,在这个示例表中,如果我希望项目排名前2位,我将把它插入到我的表中

+--------------------------------------------------------------------------+
|   Name               cc          Platform         Playcount      Date    |
+--------------------------------------------------------------------------+
| The Godfather      IN           Web              20000            20140701 |
| The Godfather      IN           Mob              210            20140701 |
| The Godfather      US           Web              221            20140701  |
| The Godfather      US           Mob              1200            20140701 |
| Fight Club      IN           Web              2002            20140701    |
| Fight Club      IN           Mob              2100            20140701    |
| Fight Club      US           Web              2           20140701     |
| Fight Club      US           Mob              1000            20140701    |
+--------------------------------------------------------------------------+ 

分组方式和订单方式如何

SELECT 
    Name, 
    SUM(Playcount) as TotalPlayCount 
FROM Movies 
GROUP BY Name 
ORDER BY TotalPlayCount DESC 
LIMIT 0, 20
然后,可以使用它将外接程序添加到新表中

INSERT INTO Statistics (Name, Playcount) 
SELECT 
    Name, 
    SUM(Playcount) as TotalPlayCount 
FROM Movies 
GROUP BY Name 
ORDER BY TotalPlayCount DESC

这里有一个格式糟糕的查询(可能是有bug的LoL),它可以满足您的需要。欢迎任何人提供反馈以改进它

INSERT INTO top20 (name, cc, platform, playcount, date) 
SELECT 
    Name, 
    cc,
    Platform,
    Playcount,
    date
FROM
(SELECT 
    m.Name, 
    m.cc,
    m.Platform,
    m.Playcount,
    m.date,
    m2.TotalPlayCount 
FROM Movies m
LEFT JOIN (
    SELECT 
        Name, 
        SUM(Playcount) as TotalPlayCount 
    FROM Movies 
    GROUP BY Name 
    ORDER BY TotalPlayCount DESC 
    LIMIT 20) as m2
USING (Name)
ORDER BY TotalPlayCount DESC, Name, cc, Platform) as temp
-- if the final inserted data is not in the order you want, add more ORDER clause here

你能先发布你的查询吗?如果可能的话,展示你的查询。第二,如果可能的话,制作一个SQLfiddle@SQLfiddle.com。最后,我想我知道你在说什么,但是如果你有一个你想要的结果的例子,而不是简单的文本描述,那就太好了。我添加了排名<2的结果。谢谢。总和播放次数,按姓名分组,按播放次数排序。如果您愿意阅读手册,请使用非常基本的SQL。这不会让我看到所有四行。我认为您的方向是正确的,但我相信OP希望在最终表格中显示每部电影的所有4行。如果你在第一次查询中使用SUM和group by name,那么你将得到一个由20个条目组成的表,而不是80个条目。这正是@JackyCheng所说的。我需要相应的4行。