sorteren na een berekening
ik heb voor het sellecteren van gegevens uit de database de volgende query:
Code (php)
1
2
3
2
3
<?
$query = "SELECT id,player,SUM(ping),SUM(times), COUNT(player) FROM avarages WHERE player LIKE '%$search%' $server_select GROUP BY `player` ORDER BY `avarages`.`$order` $asc LIMIT $limit";
?>
$query = "SELECT id,player,SUM(ping),SUM(times), COUNT(player) FROM avarages WHERE player LIKE '%$search%' $server_select GROUP BY `player` ORDER BY `avarages`.`$order` $asc LIMIT $limit";
?>
het gaat hierbij om GROUP bij `player`
Een speler kan meerdere keren voorkomen in de database
Ik wil de gemiddelde ping van een speler krijgen, en deze word gerekend door (ping1 * times1) + (ping2 * times2) ect / times total
Als ik nu wil sorteren op de ping van een speler sorteert hij verkeerd: ORDER BY `avarages`.`ping` want hij pakt dat de laagste ping van een speler, terwijl als deze meerdere keren in een group kan voorkomen zijn ping misschien wil hoger is?
Ik wil dus kunnen sorteren nadat ik de totale ping heb berekend binnen een GROUP? Kan dit?
Mvg, Koen
koen schreef op 11.01.2009 16:20:
Dat is toch hetzelfde als AVG(ping) * AVG(times) voor elke speler? Dus:Ik wil de gemiddelde ping van een speler krijgen, en deze word gerekend door (ping1 * times1) + (ping2 * times2) ect / times total
Let er ook nog even op dat jouw oorspronkelijke query niet geldig is. In de GROUP BY moet je namelijk alle kolommen op nemen die in de SELECT voorkomen en geen onderdeel zijn van een aggregate functie. In jouw eerste query zijn dat dus id en player.
ps. Verder kun je zodra je groepeert op de spelers, niet meer sorteren op de verschillende records van een bepaalde speler. Door de GROUP BY zijn die nu samen gevoegd tot 1 groep en daar kun je geen specifieke records meer uit halen. Je kunt enkel nog gegevens over die gehele groep bepalen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Wat jij doet is (50+10/2)*(100+10/2)
Kan ik hierop wel sorteren?
AVG(ping) * AVG(times) AS average
koen schreef op 11.01.2009 16:46:
In dat geval moet dit volgens mij ook wel werken:nee dit is niet hetzelfde
En ja, je kunt gewoon op 'average' sorteren...