• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

SQL - Top 5 power guilds, ascending order ?

psilocibe

Member
Joined
Jul 9, 2007
Messages
479
Reaction score
8
This shows the level of guilds,
I'm doing a top 5 guilds level, how do I sort in ascending order.
do this work in sql?
Code:
while($x<=5) {
  $sumav = $SQL->query("SELECT AVG(`level`) AS `level_avg` FROM `players` LEFT JOIN `guild_membership` AS `gm` ON `gm`.`player_id` = `players`.`id` WHERE `gm`.`guild_id` = ".$x."")->fetch();
  $x++;
  echo round($sumav['level_avg']);
  echo '<br>';
}
Sry my english.
 
Last edited by a moderator:
PHP:
ORDER BY `level` ASC LIMIT 1;

Edit, saw now for guilds.. Use this as an example :)
 
Last edited:
PHP:
ORDER BY `level` DESC LIMIT 1;

Edit, saw now for guilds.. Use this as an example :)

Tested, not work. Test you.

Code:
while($x<=5) {
"SELECT AVG(`level`) AS `level_avg` FROM `players` LEFT JOIN `guild_membership` AS `gm` ON `gm`.`player_id` = `players`.`id` WHERE `gm`.`guild_id` = ".$x." ORDER BY `level` ASC LIMIT 1"
$x++;
echo round($sumav['level_avg']);
echo '<br>';
}

Up.

Did not work and other tests, increased the level of the guild but not ordered.

PHP:
$x=1;
while($x<=2) {
  $sumav = $SQL->query("SELECT AVG(`p`.`level`) AS `avg_level`, `g`.`name` AS `name` FROM `players` p LEFT JOIN `guild_membership` gm ON `p`.`id` = `gm`.`player_id` LEFT JOIN `guilds` g ON `gm`.`guild_id` = ".$x." WHERE ".$x." > 0 GROUP BY `name` ORDER BY `avg_level` DESC, `name` ASC LIMIT 0, 5")->fetch();
  $x++;
  echo round($sumav['avg_level']);
  echo '<br>';
}

Result:

693
727


Guild Level 727 is in front of the 693

My script.

PHP:
echo'<form action="?subtopic=accountmanagement" method="post"><div class="Themebox2" style="background-image:url('.$layout_name.'/images/themeboxes/admin/login2.gif);"><br><tr bgcolor="#f1e0c6">
        <td><table width="100%" cellspacing="0" cellpadding="0" border="0">        
    <tbody><tr><td></font></b></td></tr></tbody></table></td></tr><br><font color="#234234"><b><center>';
  $x=1; 
  while($x<=2) {   
  $sumav = $SQL->query("SELECT AVG(`p`.`level`) AS `avg_level`, `g`.`name` AS `name` FROM `players` p LEFT JOIN `guild_membership` gm ON `p`.`id` = `gm`.`player_id` LEFT JOIN `guilds` g ON `gm`.`guild_id` = ".$x." WHERE ".$x." > 0 GROUP BY `name` ORDER BY `avg_level` DESC, `name` ASC LIMIT 0, 5")->fetch();
  $x++;
  echo '<br>';
  echo round($sumav['avg_level']);
//  echo $sumav['name'];
  }
  echo'<br><br><br><br><br><br></form>';
 
Last edited by a moderator:
Code:
SELECT g.name AS guild, ROUND(AVG(p.level)) AS average FROM guilds AS g LEFT JOIN guild_membership AS gm ON gm.guild_id = g.id LEFT JOIN players AS p ON p.id = gm.player_id GROUP BY g.id ORDER BY average DESC LIMIT 5;
 
Code:
SELECT g.name AS guild, ROUND(AVG(p.level)) AS average FROM guilds AS g LEFT JOIN guild_membership AS gm ON gm.guild_id = g.id LEFT JOIN players AS p ON p.id = gm.player_id GROUP BY g.id ORDER BY average DESC LIMIT 5;

I changed the DESC to ASC but the result does not change. He must calculate the level of all the guilds and show which is the largest.

The guild level is calculated by adding the level of all members and dividing by the number of members.

If you got it can show your script?
 
PHP:
<?php

$topGuilds = $SQL->query('SELECT g.name AS guild, ROUND(AVG(p.level)) AS average FROM guilds AS g LEFT JOIN guild_membership AS gm ON gm.guild_id = g.id LEFT JOIN players AS p ON p.id = gm.player_id GROUP BY g.id ORDER BY average DESC LIMIT 5;')->fetchAll();

foreach ($topGuilds as $guild) {
    echo '<p><strong>'.$guild['guild'].'</strong> - '.$guild['average'].'</p>';
}
 
Back
Top