| Autor | Zpráva | ||
|---|---|---|---|
| Petr Ká Profil |
#1 · Zasláno: 2. 1. 2013, 16:06:36
Dobrý den,
zřejmě tento dotaz by měl být zaveden spíše v "Databáze na webu", nicméně zpracování potřebuji vytvořit v php - generování výsledku. Ale k dotazu: Jedná se o klasický tipovací script výsledku sportovní události, kde soutěžící vyplní několik polí (centimetry; čas, ve který sportovec provede svůj výkon (zvlášť hodiny a minuty); kolikátý pokus). Takto nasbíraná data potřebuji ihned po ukončení soutěže seřadit dle toho, kdo tipl nejblíže... Děkuji |
||
| DJ Miky Profil |
#2 · Zasláno: 2. 1. 2013, 16:12:43
Nejdříve bys měl definovat, co přesně znamená nejblíže. Musíš mít vymyšlený algoritmus, jak výsledky řadit = jak spočítat vzdálenost od správného výsledku. Předpokládám, že třeba odchylka jednoho centimetru bude mít jinou váhu než odchylka jedné hodiny.
|
||
| Petr Ká Profil |
#3 · Zasláno: 2. 1. 2013, 16:18:02
DJ Miky:
Mělo by to mít priority: 1 - centimetry 2 - pokus 3 - čas |
||
| Alphard Profil |
#4 · Zasláno: 2. 1. 2013, 16:29:19
Je třeba přesně definovat výpočty. Např. čas převést na sekundy, pak spočítat nějaké ohodnocení tipu rank = w1*abs(cm-cm') + w2*abs(time-time') + w3*abs(order-order'), kde wn jsou váhy jednotlivých parametrů. Pak lze snadno řadit podle rank.
|
||
| Petr Ká Profil |
#5 · Zasláno: 2. 1. 2013, 16:45:28
Chápu dobře, že by script měl vypadat nějak takhle ?
// Výsledky soutěže
$res_cm = 100;
$res_hour = 18;
$res_mins = 42;
$res_time = mktime($res_hour, $res_mins);
// zpracování výsledků
$results = array();
while($row = mysql_fetch_assoc($query)){
$rank = 10 * abs( $res_cm - floatval( $row["cm"] ) ) + 5 * abs( $res_time - ( mktime($row["hour"], $row["hour"]) ) ) + 1 * abs( $pok - $res_pok );
$results[$rank][] = $row;
}
krsort($results);... navíc jsem se uvědomil další problém. Jak to pak vyřešit, když sportovců je několik (mnoho výsledků) a soutěžících v tipovací soutěži také? |
||
| Alphard Profil |
#6 · Zasláno: 2. 1. 2013, 17:42:36
Je to jedna z možností, jak by to fungovat mohlo. Jen bych teda ten algoritmus dal přimo sql souboru a řadil už tam.
Ten problém n sportovců a m soutěžících zase závisí na tom, co chcete najít. Absolutně nejmenší odchylku kteréhokoliv sportovce a soutěžícího? |
||
| Petr Ká Profil |
#7 · Zasláno: 2. 1. 2013, 21:50:00
Alphard:
Přesně tak... Na úrovni MySQL si nějak nedokážu představit ten dotaz. |
||
| Alphard Profil |
#8 · Zasláno: 3. 1. 2013, 08:31:04
O kolika záznamech se bavíme? Jako nejjednodušší se mi zdá jít na to hrubou silou, tedy kartézský součin (join bez spojovací podmínky), vypočítat rank pro každou dvojici a seřadit.
|
||
| Petr Ká Profil |
Alphard:
Uvedu příklad.. 30 sportovců * 3 pokusy každý = 90 výsledků předpokládaný počet soutěžících 700 - 1000 lidí edit Každý soutěžící má 1 pokus tipování. Navíc se rozlišuje, tip na ženský výkon a mužský výkon, to je zřejmě důležité a zapoměl jsem dodat... |
||
| Kcko Profil |
#10 · Zasláno: 3. 1. 2013, 10:08:22
Petr Ká:
Zkuste se mrknout http://www.rjwebdesign.cz/Blog/PHP/20080113-Generovani-Nejen-Fotbalove-Tabulky Zde jsou nastíněny možnosti jak tabulku generovat (za běhu, nebo ji lze předpočítat) |
||
|
Časová prodleva: 14 let
|
|||
0