improved query code
This commit is contained in:
parent
0198fbc3aa
commit
afb9b6df87
@ -144,15 +144,15 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
private function initTables() {
|
private function initTables() {
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_RANK . "` (
|
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_RANK . "` (
|
||||||
`PlayerIndex` mediumint(9) NOT NULL default 0,
|
`PlayerIndex` int(11) NOT NULL,
|
||||||
`Rank` mediumint(9) NOT NULL default 0,
|
`Rank` int(11) NOT NULL,
|
||||||
`Avg` float NOT NULL default 0,
|
`Avg` float NOT NULL,
|
||||||
KEY `PlayerIndex` (`PlayerIndex`),
|
KEY `PlayerIndex` (`PlayerIndex`),
|
||||||
UNIQUE `Rank` (`Rank`)
|
UNIQUE `Rank` (`Rank`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Mania Control ServerRanking';";
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ServerRanking';";
|
||||||
$mysqli->query($query);
|
$mysqli->query($query);
|
||||||
if ($mysqli->error) {
|
if ($mysqli->error) {
|
||||||
trigger_error($mysqli->error, E_USER_ERROR);
|
throw new \Exception($mysqli->error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,12 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
|
||||||
// Erase old Average Data
|
// Erase old Average Data
|
||||||
$mysqli->query('TRUNCATE TABLE ' . self::TABLE_RANK);
|
$query = "TRUNCATE TABLE `" . self::TABLE_RANK . "`;";
|
||||||
|
$mysqli->query($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
$type = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MIN_RANKING_TYPE);
|
$type = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MIN_RANKING_TYPE);
|
||||||
|
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
@ -199,18 +204,14 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$ranks[$player] = $killDeathRatios[$player] * $accuracies[$player] * 1000;
|
$ranks[$player] = $killDeathRatios[$player] * $accuracies[$player] * 1000;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
arsort($ranks);
|
arsort($ranks);
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case self::RANKING_TYPE_POINTS:
|
case self::RANKING_TYPE_POINTS:
|
||||||
$minHits = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MIN_HITS_POINTS_RANKING);
|
$minHits = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MIN_HITS_POINTS_RANKING);
|
||||||
|
$ranks = $this->maniaControl->statisticManager->getStatsRanking(StatisticCollector::STAT_ON_HIT, -1, $minHits);
|
||||||
$ranks = $this->maniaControl->statisticManager->getStatsRanking(StatisticCollector::STAT_ON_HIT, -1, $minHits);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case self::RANKING_TYPE_RECORDS: //TODO verify workable status
|
case self::RANKING_TYPE_RECORDS: //TODO verify workable status
|
||||||
/** @var LocalRecordsPlugin $localRecordsPlugin */
|
/** @var LocalRecordsPlugin $localRecordsPlugin */
|
||||||
@ -223,9 +224,9 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
$maxRecords = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MAX_STORED_RECORDS);
|
$maxRecords = $this->maniaControl->settingManager->getSettingValue($this, self::SETTING_MAX_STORED_RECORDS);
|
||||||
|
|
||||||
$query = 'SELECT playerIndex, COUNT(*) AS Cnt
|
$query = 'SELECT playerIndex, COUNT(*) AS Cnt
|
||||||
FROM ' . LocalRecordsPlugin::TABLE_RECORDS . '
|
FROM ' . LocalRecordsPlugin::TABLE_RECORDS . '
|
||||||
GROUP BY PlayerIndex
|
GROUP BY PlayerIndex
|
||||||
HAVING Cnt >=' . $requiredRecords;
|
HAVING Cnt >=' . $requiredRecords;
|
||||||
|
|
||||||
$result = $mysqli->query($query);
|
$result = $mysqli->query($query);
|
||||||
$players = array();
|
$players = array();
|
||||||
@ -238,13 +239,13 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
foreach ($maps as $map) {
|
foreach ($maps as $map) {
|
||||||
$records = $localRecordsPlugin->getLocalRecords($map, $maxRecords);
|
$records = $localRecordsPlugin->getLocalRecords($map, $maxRecords);
|
||||||
|
|
||||||
$i = 1;
|
$index = 1;
|
||||||
foreach ($records as $record) {
|
foreach ($records as $record) {
|
||||||
if (isset($players[$record->playerIndex])) {
|
if (isset($players[$record->playerIndex])) {
|
||||||
$players[$record->playerIndex][0] += $i;
|
$players[$record->playerIndex][0] += $index;
|
||||||
$players[$record->playerIndex][1]++;
|
$players[$record->playerIndex][1]++;
|
||||||
}
|
}
|
||||||
$i++;
|
$index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,16 +271,19 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
$this->recordCount = count($ranks);
|
$this->recordCount = count($ranks);
|
||||||
|
|
||||||
//Compute each player's new average score
|
//Compute each player's new average score
|
||||||
$query = "INSERT INTO " . self::TABLE_RANK . " VALUES ";
|
$query = "INSERT INTO `" . self::TABLE_RANK . "` VALUES ";
|
||||||
$i = 1;
|
$index = 1;
|
||||||
|
|
||||||
foreach ($ranks as $player => $rankValue) {
|
foreach ($ranks as $player => $rankValue) {
|
||||||
$query .= '(' . $player . ',' . $i . ',' . $rankValue . '),';
|
$query .= '(' . $player . ',' . $index . ',' . $rankValue . '),';
|
||||||
$i++;
|
$index++;
|
||||||
}
|
}
|
||||||
$query = substr($query, 0, strlen($query) - 1); // strip trailing ','
|
$query = substr($query, 0, strlen($query) - 1); // strip trailing ','
|
||||||
|
|
||||||
$mysqli->query($query);
|
$mysqli->query($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -350,7 +354,9 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
//TODO setting global from db or local
|
//TODO setting global from db or local
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
|
||||||
$result = $mysqli->query('SELECT * FROM ' . self::TABLE_RANK . ' WHERE PlayerIndex=' . $player->index);
|
$query = "SELECT * FROM `" . self::TABLE_RANK . "`
|
||||||
|
WHERE `PlayerIndex` = {$player->index};";
|
||||||
|
$result = $mysqli->query($query);
|
||||||
if ($mysqli->error) {
|
if ($mysqli->error) {
|
||||||
trigger_error($mysqli->error);
|
trigger_error($mysqli->error);
|
||||||
return null;
|
return null;
|
||||||
@ -400,15 +406,21 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
|
|||||||
$rankObject = $this->getRank($player);
|
$rankObject = $this->getRank($player);
|
||||||
$nextRank = $rankObject->rank - 1;
|
$nextRank = $rankObject->rank - 1;
|
||||||
|
|
||||||
$result = $mysqli->query('SELECT * FROM ' . self::TABLE_RANK . ' WHERE Rank=' . $nextRank);
|
$query = "SELECT * FROM `" . self::TABLE_RANK . "`
|
||||||
if ($result->num_rows > 0) {
|
WHERE `Rank` = {$nextRank}";
|
||||||
$row = $result->fetch_array();
|
$result = $mysqli->query($query);
|
||||||
$result->free_result();
|
if ($mysqli->error) {
|
||||||
return Rank::fromArray($row);
|
trigger_error($mysqli->error);
|
||||||
} else {
|
|
||||||
$result->free_result();
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if ($result->num_rows <= 0) {
|
||||||
|
$result->free();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = $result->fetch_array();
|
||||||
|
$result->free();
|
||||||
|
return Rank::fromArray($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user