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;
}
}