// Session as read-only to not lock the file. session_start(); session_write_close(); $userID = $_SESSION['userID']; require('../includes/maps.php'); require('../includes/mapclass.php'); require('../includes/datas.php'); include_once('../includes/sqli.php'); if ($_GET['getmap'] == 'true') { $mapID = $_GET['mapID']; $code = getMapCode($mapID); $map = GenerateMapByCode($code); echo displaymap($map, $mapID); } if ($_GET['getscores'] == 'true') { } if ($_GET['getmaplist'] == 'true') { $daysAgo = $_GET['daysago']; //echo "$daysAgo"; $todaysScoreMaps = getMapsPlayed($daysAgo); echo getMapNavigation($todaysScoreMaps); } if (isset($_GET['getmapidsbydate'])) { //TODO: SANATIZE $requestDate = $_GET['getmapidsbydate']; echo json_encode(getMapIDsByDate($requestDate)); } // Here is that SQL for you // SELECT correctMapIds.mapType, maps.ID, maps.code // FROM maps // INNER JOIN // ( // SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType // FROM `mapOfTheDay` // INNER JOIN // ( // SELECT mapType, MIN(mapExpireTime) AS mapExpireTime // FROM mapOfTheDay // WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -1 DAY) // GROUP BY mapType // ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType // AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime // GROUP BY mapOfTheDay.mapType // ) AS correctMapIds ON maps.ID = correctMapIds.mapId //TODO: SANITIZE. function getMapIDsByDate($date) { global $mysqli; $sql = "SELECT MIN(mapOfTheDay.mapId) AS mapId FROM `mapOfTheDay` INNER JOIN ( SELECT mapType, MIN(mapExpireTime) AS mapExpireTime FROM mapOfTheDay WHERE mapExpireTime > ? GROUP BY mapType ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime GROUP BY mapOfTheDay.mapType"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", $date); $stmt->execute(); $stmt->bind_result($mapID); /* fetch values */ while ($stmt->fetch()) { $ids[] = $mapID; } return $ids; var_dump($ids); while ($myrow[] = $result->fetch_assoc()) {} $result = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($result) == 0) return -1; global $mapNamesByType; $r = array(); while($data[] = mysql_fetch_array($result)) { $mapID = $data['mapID']; $mapType = $data['mapType']; $map = new map($code); if ($map->name == '') $map->name = $mapNamesByType[$mapType]; $r[$mapID] = $map; } return $myrow; } function getMapsPlayed($daysAgo) { // $sql = " // SELECT `mapID`, `code`, `mapType` // FROM `mapOfTheDay` // INNER JOIN `maps` ON `mapID` = maps.ID // WHERE DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) = // mapDate AND // `mapType` IN (1, 2, 3, 4, 5) // "; $sql = "SELECT correctMapIds.mapType, maps.ID as mapID, maps.code FROM maps INNER JOIN ( SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType FROM `mapOfTheDay` INNER JOIN ( SELECT mapType, MIN(mapExpireTime) AS mapExpireTime FROM mapOfTheDay WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) GROUP BY mapType ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime GROUP BY mapOfTheDay.mapType ) AS correctMapIds ON maps.ID = correctMapIds.mapId"; $result = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($result) == 0) return -1; global $mapNamesByType; $r = array(); while($data = mysql_fetch_array($result)) { $code = $data['code']; $mapID = $data['mapID']; $mapType = $data['mapType']; $map = new map($code); if ($map->name == '') $map->name = $mapNamesByType[$mapType]; $r[$mapID] = $map; } return $r; } function getMapNavigation(&$maps) { foreach ($maps as $mapID => &$map) { $r .= "