Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tworzenie rankingu
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Witam.

Posiadam taką tabelę w bazie danych:

  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `points` int(1) NOT NULL,
  4. `team` varchar(255) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
  7.  
  8. INSERT INTO `test` (`id`, `points`, `team`) VALUES
  9. (1, 5, 'a'),
  10. (2, 5, 'b'),
  11. (3, 5, 'a'),
  12. (4, 3, 'c'),
  13. (5, 2, 'a'),
  14. (6, 5, 'd'),
  15. (7, 5, 'b');


Jest to spis zadań wykonywanych przez drużyny, które dostają za wykonanie punkty

Kiedy wykonuję zapytanie:
  1. SELECT SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team FROM test WHERE points > 0 GROUP BY team

Zwraca mi w wyniku ilość zdobytych punktów, ilość wykonanych zadań oraz ID drużyny która wykonała zadanie. Mój problem polega na tym, że muszę posortować te wyniki wg średniej punktów każdej drużyny malejąco.

Czyli: rank_points/rank_job = rank_rating. Chciałbym posortować to wg. rank_rating DESC. Oczywiście mogę sobie uzyć funkcji usort" title="Zobacz w manualu PHP" target="_manual, ale co da się na bazie to powinniśmy to robić.
Z góry dziękuję za odpowiedzi, Athlan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
AcidBurnt
post
Post #2





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


  1. SELECT
  2. SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team, sum(pints)/count(id) AS rating
  3. FROM test WHERE points > 0 GROUP BY team ORDER BY rating


Ten post edytował AcidBurnt 29.06.2007, 14:28:09
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Poprawne zapytanie:
  1. SELECT
  2. SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team, SUM(points)/COUNT(id) AS rank_rating
  3. FROM test WHERE points > 0 GROUP BY team ORDER BY rank_rating DESC


najpierw grupujemy, potem sortujemy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Zupełnie zapomniałem o tym, że można wykonywać jakiekolwiek obliczenia w SELECT.

Dzięki za szybką odpowiedź AcidBrunt (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 21:38