[ bloker @ 05.01.2011. 18:48 ] @
Da li mogu ovako nešto da uradim pomoću sql-a..
Naime u bazi imam listu takmičara i broj osvojenih bodova
Ovako nešto:
Code:

takmičar          bodovi

takm1             5
takm2             3
takm3             4
takm4             3
takm5             2


e sada mi treba da na neki način dodijelim osvojena mjesta ovim takmičarima..
Code:

takmičar         osvojeno mjesto

takm1             1
takm3             2
takm2             3
takm4             3
takm5             5


(takmičar 2 i 4 imaju isti broj bodova tako da su u ovom slučaju zauzeli 3. mjesto, a sledeći takmičar je zauzeo 5. mjesto)

u bazi ću imati i po 30 takmičara, a od njih će biti po 3 ili više sa istim brojem bodova tako da oni moraju imati isto osvojeno mjesto..

Treba mi bilo kakvo rješenje za ovaj problem ili bar neka ideja..

Hvala,
Milenko
[ bogdan.kecman @ 05.01.2011. 20:36 ] @
u sql-u uradis order by bodovi desc, i onda iterises kroz rezultat "rucno" i kada se promeni broj bodova povecas mesto za jedan .. ima fora da to uradis sa varijablama u mysql-u ali je problem sto je to resenje koje "ne mora da radi posle upgrade-a", dakle nacin na koji radi execution gde se promenjljive menjaju moze da se promeni bez najave tako da ti odradis upgrade i odjednom ti upit vise ne radi ... ali generalno bi to islo otprilike ovako

Code:

mysql> insert into t3 values ('takm1', 5), ('takm2', 3), ('takm3', 4), ('takm4', 3), ('takm5', 2);
Query OK, 5 rows affected (0.02 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t3 order by bod desc;
+-------+------+
| takm  | bod  |
+-------+------+
| takm1 |    5 |
| takm3 |    4 |
| takm2 |    3 |
| takm4 |    3 |
| takm5 |    2 |
+-------+------+
5 rows in set (0.00 sec)


mysql> set @mesto=0; set @prethodni=0; select takm,bod, if(@prethodni=bod,@mesto,@mesto:=@mesto+1) as mesto, @prethodni:=bod as ignorisi from t3 order by bod desc;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+-------+------+-------+----------+
| takm  | bod  | mesto | ignorisi |
+-------+------+-------+----------+
| takm1 |    5 |     1 |        5 |
| takm3 |    4 |     2 |        4 |
| takm2 |    3 |     3 |        3 |
| takm4 |    3 |     3 |        3 |
| takm5 |    2 |     4 |        2 |
+-------+------+-------+----------+
5 rows in set (0.00 sec)

mysql> 

[ bogdan.kecman @ 05.01.2011. 20:40 ] @
ako hoces 12335 a ne 12334 onda bi islo
Code:

mysql> set @mesto=0; set @mm=1; set @prethodni=0; select takm,bod, if(@prethodni=bod,@mesto,@mesto:=@mm) as mesto, (@mm:=@mm+1)-1 as rbr, @prethodni:=bod as ignorisi from t3 order by bod desc;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+-------+------+-------+------+----------+
| takm  | bod  | mesto | rbr  | ignorisi |
+-------+------+-------+------+----------+
| takm1 |    5 |     1 |    1 |        5 |
| takm3 |    4 |     2 |    2 |        4 |
| takm2 |    3 |     3 |    3 |        3 |
| takm4 |    3 |     3 |    4 |        3 |
| takm5 |    2 |     5 |    5 |        2 |
+-------+------+-------+------+----------+
5 rows in set (0.00 sec)

mysql> 

[ bloker @ 06.01.2011. 15:35 ] @
Radi ok.. Hvala..
Našao sam neki sql kod za sortiranje i ovdje
http://www.1keydata.com/sql/sql-rank.html
koji isto ok radi..
[ bogdan.kecman @ 06.01.2011. 16:07 ] @
uh .. da .. moze i tako samo, to je jos gadnije ... (doduse, uvek ce raditi ) ...

Code:

SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;


kao sto rekoh, najbrze je da odradis na klijentu