我的表中有以下字段/结构:
(`map`, `authid`, `name`, `time`, `date`, `weapon`)
每次玩家在游戏中完成地图时,只要玩家完成地图所花费的每一map
time
都低于以前存储的任何time
,此信息就会存储在此表中的sql行中。这意味着对于任何给定的玩家,每个map
只有一行(authid
/name
(。
现在,进入我的问题。作为SQL菜鸟,我希望找出一个要运行的查询,该查询将为每个映射选择最低的15次(显然,如果每个映射的条目少于15个,则将返回所有条目(。我知道我可以在 PHP 中创建如下所示的查询:
SELECT * FROM tablename WHERE map='". $map ."' ORDER BY time LIMIT 15;
但是我需要得到一个多维数组 (PHP( 或对象 (JS(,其中包含每个唯一的map
值,以便稍后在我的代码中使用(并且需要按时间排序(,即:
{"map1":[
{"authid1":"val",
"name1":"dude1",
"time":"23.46",
"date":"val",
...},
{"authid1":"val",
"name1":"dude2",
"time":"42.33",
"date":"val",
...},
...],
"map2":[
...
...]
}
如果我不能纯粹通过SQL查询来做到这一点,那么我怎么能利用PHP或JS来完成我的目标呢?
$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;
}
}