1

テーブルに次のフィールド/構造があります。

(`map`, `authid`, `name`, `time`, `date`, `weapon`)

プレーヤーがゲームでマップを完了するたびに、この情報は、プレーヤーが完了するまでにかかったすべてmapの情報がtime、以前に保存された よりも少ない限り、このテーブルの sql 行に保存されtimeます。mapこれは、特定のプレーヤー ( authid/ )ごとに 1 つの行しか存在しないことを意味しnameます。

では、私の質問に移ります。私は SQL 初心者なので、マップごとに最低 15 回を選択する実行するクエリを見つけたいと考えています(マップごとのエントリが 15 未満の場合は、それらすべてが返されることは明らかです)。PHP で次のようなクエリを作成できることはわかっています。

SELECT * FROM tablename WHERE map='". $map ."' ORDER BY time LIMIT 15;

mapしかし、コードの後半で操作するために、すべての一意の値を含む多次元配列 (PHP) またはオブジェクト (JS) を作成する必要があります (時間でソートする必要があります)。

{"map1":[
    {"authid1":"val",
     "name1":"dude1",
     "time":"23.46",
     "date":"val",
     ...},
     {"authid1":"val",
     "name1":"dude2",
     "time":"42.33",
     "date":"val",
     ...},
     ...],
 "map2":[
    ...
    ...]
}

これを純粋に SQL クエリで行うことができない場合、PHP や JS を利用して目的を達成するにはどうすればよいでしょうか?

4

1 に答える 1

0
$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;
    }
}
于 2013-08-25T20:12:26.113 に答える