Autor Zpráva
mirda
Profil *
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
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 *
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
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
Napadlo mě. Co je lepší sada výsledků?
20, 15, 0, 0
nebo
20, 5, 5, 5
?
mirda
Profil *
20,15,0,0
mirda
Profil *
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
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 *
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
Prima.
mirda
Profil *
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0