Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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 选择包含每个唯一字段值的行&;按另一个有限制的字段排序_Php_Javascript_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

Php 选择包含每个唯一字段值的行&;按另一个有限制的字段排序

Php 选择包含每个唯一字段值的行&;按另一个有限制的字段排序,php,javascript,mysql,sql,greatest-n-per-group,Php,Javascript,Mysql,Sql,Greatest N Per Group,我的表中有以下字段/结构: (`map`, `authid`, `name`, `time`, `date`, `weapon`) 每当玩家在游戏中完成地图时,只要玩家完成地图所花费的时间小于之前存储的时间,该信息就会存储在此表中的sql行中。这意味着对于任何给定的播放器(authid/name),每个map将只有一行 现在,我来回答我的问题。作为SQLNoob,我希望找出一个要运行的查询,该查询将选择每个映射的最低15次(显然,如果每个映射少于15个条目,那么所有条目都将返回)。我知道我可以

我的表中有以下字段/结构:

(`map`, `authid`, `name`, `time`, `date`, `weapon`)
每当玩家在游戏中完成地图时,只要玩家完成地图所花费的
时间小于之前存储的
时间,该信息就会存储在此表中的sql行中。这意味着对于任何给定的播放器(
authid
/
name
),每个
map
将只有一行

现在,我来回答我的问题。作为SQLNoob,我希望找出一个要运行的查询,该查询将选择每个映射的最低15次(显然,如果每个映射少于15个条目,那么所有条目都将返回)。我知道我可以在PHP中创建如下查询:

SELECT * FROM tablename WHERE map='". $map ."' ORDER BY time LIMIT 15;
但我最终需要一个多维数组(PHP)或对象(JS),其中包含每个唯一的
map
值,以便稍后在我的代码中使用(需要按时间排序),即:


如果我不能完全通过SQL查询来实现这一点,那么我怎么能利用PHP或JS来完成我的目标呢?

最大n-per-group
上搜索(或者这里是一篇示例文章)
$q1 = "SELECT map from tablename GROUP BY map ORDER BY map";
$r1 = $db->mysqli_query($q1);
while ($mapRow = mysqli_fetch_assoc($r1)) {
    $map = $mapRow['map'];
    $q2 = "SELECT * FROM tablename WHERE map='". $map ."' ORDER BY time LIMIT 15";
    $r2 = $db->mysqli_query($q2);
    while ($dataRow = mysqli_fetch_assoc($r2)) {
        $map[] = $dataRow;
    }
}
$q1 = "SELECT map from tablename GROUP BY map ORDER BY map";
$r1 = $db->mysqli_query($q1);
while ($mapRow = mysqli_fetch_assoc($r1)) {
    $map = $mapRow['map'];
    $q2 = "SELECT * FROM tablename WHERE map='". $map ."' ORDER BY time LIMIT 15";
    $r2 = $db->mysqli_query($q2);
    while ($dataRow = mysqli_fetch_assoc($r2)) {
        $map[] = $dataRow;
    }
}