Autor | Zpráva | ||
---|---|---|---|
mirda Profil * |
#1 · Zasláno: 13. 6. 2007, 22:44:52
Zdravím, mám tabulku s výsledky, v té tabulce mám ve sloupcích (kromě jiného) druzstvo a body. Vypisuji pořadí podle součtu bodů. Až do teď je to vpořádku. Jenže pokud mi nastane situace, že součet bodů je pro dvě nebo více družstev stejný, tak v této chvíli potřebuji řadit ten součet podle vyššího počtu lepších bodů.
Příklad: družstvo Litoměřice má postupně z jednotlivých utkání - 20 bodů, 15 bodů, 15 bodů a 8 bodů družstvo Lovosice má - 20 bodů, 15 bodů, 13 bodů a 10 bodů družstvo Třebenice má 15 bodů, 15 bodů, 15 bodů a 13 bodů Ve všech případech je součet 58 bodů a teď bych potřeboval seřadit ta družstva takto: 1.Litoměřice - protože má stejně s Lovosicemi 1x20 bodů, ale má 2x 15 bodů a Lovosice jen 1x. Třebenice mají sice 3x15 bodů, ale zase proti nim hovoří to, že nemají ze žádného utkání 20 bodů 2.Lovosice - mají k lepšímu 20 bodů oproti Třebenicím 3.Třebenice Dokázal by mi někdo poradit, nebo je tento způsob řazení dat z databáze nemožný? Ještě pro ukázku uvádím skript, kterým vypisuji ty součty bodů select count(v.idrocnik), sum(v.body) as body, d.druzstvo as druzstvo, o.okres as okres from vysledky_soutezi as v, okresy as o, druzstva as d, rocniky_soutezi as r where v.iddruzstvo=d.idd and d.idokres=o.ido and v.idrocnik=r.idsand v.idrocnik='".($GLOBALS['rocnik'])."' group by v.iddruzstvo, r.ids order by body desc" |
||
MzM Profil |
#2 · Zasláno: 14. 6. 2007, 08:50:14
Vymýšlel jsem šílené teorie rozdílů bodů a nakonec mě napadlo:
Když mají stejný počet bodů, tak je lepší ten co má z nějakého utkání nejvyšší počet bodů. Když mají stejný počet nejvyšších bodů, tak vzít druhý nejvyšší výsledek. atd. to by mohlo fungovat, ne? |
||
mirda Profil * |
#3 · Zasláno: 14. 6. 2007, 09:15:04
Jo něco takového by fungovat mohlo, jenže jak to zabudovat do toho sql příkazu. Prosím prosím smutně koukám.
|
||
MzM Profil |
#4 · Zasláno: 14. 6. 2007, 10:27:12
Sákryš, no jo. Do SQL, to bude vcelku hustota. Zkusím něco vymyslet. Zatím mě napadají samé SQL obludnosti a mám pocit, že jednodušší to bude poskládat až v PHP, ale třeba mě něco hezkého napadne...
|
||
MzM Profil |
#5 · Zasláno: 14. 6. 2007, 10:34:05
Napadlo mě. Co je lepší sada výsledků?
20, 15, 0, 0 nebo 20, 5, 5, 5 ? |
||
mirda Profil * |
#6 · Zasláno: 14. 6. 2007, 10:47:27
20,15,0,0
|
||
mirda Profil * |
#7 · Zasláno: 14. 6. 2007, 10:52:10
zkoušel jsem vybrat nejvyšší hodnotu ze sloupce body a řadit to pak podle té maxhodnoty, jenže protože nejsem v php profi, tak mám asi něco špatně.
doplnil jsem do toho sql dotazu - max(v.body) as maxbody jenže mi to vyhledá nejvyšší hodnotu jen u některých družstev, u některých je to třeba i nejnižší hodnota, nebo prostě náhodná :( A hlavně bych došel do slepé uličky pokud by dvě družstva měla stejnou nejvyšší hodnotu bodů. Ale možná, že tímto směrem by to nějak taky šlo |
||
MzM Profil |
#8 · Zasláno: 14. 6. 2007, 10:57:14
V tom případě půjde použít něco, na co si matně vzpomínám ze statistiky a sice suma čtverců.
Tzn 20, 15, 0, 0 má tuhle sumu 625 a 20, 5, 5, 5 má tuhle sumu 475 takže do selectu přidat sloupeček sum(body*body) as sort_2 výsledný select by pak mohl být select id_druzstva, -- nebo hrace nebo podle ceho to kumulovat sum(body) as sort_1, max(body) as sort_2, sum(body*body) as sort_3 from tabulka_bodu group by id_druzstva order by sort_1, sort_2, sort_3 toto by mohlo chodit. Ale nezkoušel jsem to, takže vyzkoušej a pro ostatní (a hlavně pro mou zvědavost) sem napiš, jestli to funguje, případně, co a kdy to nefunguje... |
||
mirda Profil * |
#9 · Zasláno: 14. 6. 2007, 11:13:35
Tak zatím to funguje, ale trošku jsem to poupravil. Protože jak jsem psal výše, z nějakého mně záhadného důvodu mi funkce max nevypíše u některých družstev skutečnou nejvyšší hodnotu, takže jsem prohodil sort_3 a sort_2. Teď mi to tedy řadí nejdříve podle nejvyššího součtu bodů a následně podle tvé sumy čtverců.
Zatím tedy vše vpořádku, ještě musím do tabulky naházet zbytek dat a pak to bude odzkoušené na snad většinu možných nastalých situací při rovnosti bodů, takže ještě napíšu jestli OK nebo NE. Zatím mooooooooooooooooooooooooc díky. |
||
MzM Profil |
#10 · Zasláno: 14. 6. 2007, 12:25:24
Prima.
|
||
Časová prodleva: 7 měsíců
|
|||
mirda Profil * |
#11 · Zasláno: 22. 1. 2008, 16:51:10
Zdravím a vracím se zpátky k mému starému dotazu.
Do této chvíle vše fungovalo tak, jak má, ale jen až do teď. Mám dvě družstva, která se mi řadí špatně. A družstvo má tyto body: 20,17,17,17,17,17,15,15,9,2 B družstvo má tyto body: 20,17,17,17,17,15,15,15,13,0 Podle součtu mají obě družstva 146 bodů, takže by se mělo řadit dle zisku lepších bodů. Zde je také problém, protože obě družstva mají zisk 20 bodů. Tudiž by se měl brát k seřazení dat součet čtverců. Ovšem součet čtverců u družstva A je 2380 a u družstva B 2400, což dává družstvo B před družstvo A. Jenže by to mělo být opačně, protože družstvo A má větší počet získaných 17 bodů. Takže jak dál? Může mi prosím někdo opět poradit? Moc díky |
||
Časová prodleva: 16 let
|
0