diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index 7be4ddcb..7bc4d7d5 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -145,7 +145,7 @@ // Get ranking $ranking = array( 'superior' => $this->Characters->getSuperiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']), - 'inferior' => $this->Characters->getInferiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']) + 'inferior' => $this->Characters->getInferiorCharacters($seminary['id'], $character['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']) ); // Get Quest topics diff --git a/models/AchievementsModel.inc b/models/AchievementsModel.inc index 543a2a30..1ce77070 100644 --- a/models/AchievementsModel.inc +++ b/models/AchievementsModel.inc @@ -114,15 +114,18 @@ public function getSeldomAchievements($seminaryId, $count, $alsoWithDeadline=true) { return $this->db->query( - 'SELECT id, title, url, description, progress, hidden, unachieved_achievementsmedia_id, achieved_achievementsmedia_id, count(DISTINCT character_id) AS c '. + 'SELECT achievements.id, achievements.title, achievements.url, achievements.description, achievements.progress, achievements.hidden, achievements.unachieved_achievementsmedia_id, achievements.achieved_achievementsmedia_id, count(DISTINCT achievements_characters.character_id) AS c '. 'FROM achievements_characters '. + 'INNER JOIN characters_characterroles ON characters_characterroles.character_id = achievements_characters.character_id '. + 'INNER JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id AND characterroles.name = ? '. 'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '. - 'WHERE achievements.seminary_id = ? AND only_once = 0 '. + 'WHERE achievements.seminary_id = ? AND achievements.only_once = 0 '. (!$alsoWithDeadline ? 'AND achievements.deadline IS NULL ' : null). - 'GROUP BY achievement_id '. - 'ORDER BY count(DISTINCT character_id) ASC '. + 'GROUP BY achievements_characters.achievement_id '. + 'ORDER BY count(DISTINCT achievements_characters.character_id) ASC '. 'LIMIT ?', - 'ii', + 'sii', + 'user', $seminaryId, $count ); diff --git a/models/CharactersModel.inc b/models/CharactersModel.inc index 3fef517d..4f6b5d54 100644 --- a/models/CharactersModel.inc +++ b/models/CharactersModel.inc @@ -299,7 +299,7 @@ 'INNER JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '. 'INNER JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id AND characterroles.name = ? '. 'WHERE charactertypes.seminary_id = ? AND characters.xps > ? '. - 'ORDER BY characters.xps ASC '. + 'ORDER BY characters.xps ASC, RAND() '. 'LIMIT ?', 'sidd', 'user', @@ -316,7 +316,7 @@ * @param int $count Count of Characters to determine * @return array List of inferior Characters */ - public function getInferiorCharacters($seminaryId, $xps, $count) + public function getInferiorCharacters($seminaryId, $characterId, $xps, $count) { return $this->db->query( 'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.xps, characters.xplevel, characters.avatar_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url '. @@ -324,12 +324,12 @@ 'INNER JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. 'INNER JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '. 'INNER JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id AND characterroles.name = ? '. - 'WHERE charactertypes.seminary_id = ? AND characters.xps < ? '. - 'ORDER BY characters.xps DESC '. + 'WHERE charactertypes.seminary_id = ? AND characters.xps <= ? AND characters.id <> ? '. + 'ORDER BY characters.xps DESC, RAND() '. 'LIMIT ?', - 'sidd', + 'sidid', 'user', - $seminaryId, $xps, $count + $seminaryId, $xps, $characterId, $count ); }