Autor | Zpráva | ||
---|---|---|---|
keeehi Profil |
#1 · Zasláno: 10. 10. 2009, 10:11:07
mám takovéto pole:
Array ( [0] => Array ( [0] => Jan [1] => Novák [2] => 1700 ) [1] => Array ( [0] => Tomáš [1] => Novák [2] => 1701 ) [2] => Array ( [0] => Jan [1] => Horák [2] => 1699 ) ) a potřebuji ho seřadit sestupně podle dvojky (to číslo), v případě rovnosti vzestupně podle příjmení, v případě rovnosti podle jména k řazení používám usort a vlastní funkci function manysort($a,$b){ if($a[2]==$b[2]){ if (strcasecmp($a[1],$b[1])==0){ if (strcasecmp($a[0],$b[0])==0) return 0; else return strcasecmp($a[0],$b[0]); } else return strcasecmp($a[1],$b[1]); } elseif($a[1] < $b[1]) return 1; else return -1; } usort($pole, 'manysort'); print_r($pole); Potřeboval bych poradit, kde dělám chybu, protože si to řadí jak chce, někdy je to seřazené dobře, jindy ne. Dokud jsem to řadil pouze podle toho čísla, a v případě shody jsem se dál s tím už nezabýval, tak to fungovalo v pořádku. Nebo znáte nějaké řešení, jak toto dvourozměrné pole seřadit efektivněji? Děkuji za odpovědi |
||
tiso Profil |
#2 · Zasláno: 10. 10. 2009, 10:13:40
keeehi: a to viacrozmerné pole si získal ako?
|
||
keeehi Profil |
#3 · Zasláno: 10. 10. 2009, 10:18:24
tiso:
Získané je z databáze, ale není to jedno, odkud je? |
||
Alphard Profil |
#4 · Zasláno: 10. 10. 2009, 10:24:42
keeehi:
„Získané je z databáze, ale není to jedno, odkud je?“ Není, v databázi to půjde pravděpodobně seřadit lépe. Jakým dotazem to taháte? |
||
keeehi Profil |
#5 · Zasláno: 10. 10. 2009, 10:31:05 · Upravil/a: keeehi
Alphard:
Za něj se spíše stydím. Na vině je jistě špatně navržená struktura databáze, ale lépe jsem to prostě nevymyslel. kód na vytvoření pole z DB bypadá takto: $dotaz = "SELECT idhrace,jmeno,prijmeni FROM hraci;"; $vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést ř: 133"); while (list($idhrace,$jmeno,$prijmeni) = mysql_fetch_row($vysledek)) { $tabulka[$idhrace][0] = $jmeno; $tabulka[$idhrace][1] = $prijmeni; } $dotaz = "SELECT idhracea,idhraceb,vysledek FROM partie;"; $vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést ř: 133"); while (list($idhracea,$idhraceb,$skore) = mysql_fetch_row($vysledek)) { $tabulka[$idhracea][(6-$skore)]++; $tabulka[$idhraceb][(4+$skore)]++; } for($i=1;$i<=$pocethracu;$i++) { $dotaz = "SELECT elo FROM elo WHERE idhrace=$i ORDER BY znamka desc LIMIT 1;"; $vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést ř: 133"); $tabulka[$i][2] = mysql_result($vysledek,0); } $dotaz = "SELECT idhrace,max(elo) FROM elo GROUP BY idhrace;"; $vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést ř: 133"); while (list($idhrace,$maxelo) = mysql_fetch_row($vysledek)) { $tabulka[$idhrace][3] = $maxelo; } databáze vypadá takto: elo Sloupec Typ Nulový Výchozí idelo mediumint(8) Ne idhrace tinyint(3) Ne elo smallint(5) Ne datum date Ne znamka timestamp Ne CURRENT_TIMESTAMP hraci Sloupec Typ Nulový Výchozí idhrace tinyint(3) Ne jmeno varchar(50) Ne prijmeni varchar(50) Ne partie Sloupec Typ Nulový Výchozí idpartie mediumint(8) Ne idhracea tinyint(3) Ne idhraceb tinyint(3) Ne vysledek smallint(1) Ne |
||
tiso Profil |
#6 · Zasláno: 10. 10. 2009, 10:42:05
keeehi: „Za něj se spíše stydím. Na vině je jistě špatně navržená struktura databáze, ale lépe jsem to prostě nevymyslel.“
To je o dôvod viac, prečo začať práve tam. Otázka znie, čo vlastne potrebuješ z databázy vypisovať, podľa toho sa upraví štruktúra tabuliek. Pre začiatok môže začať s lepšími názvami stĺpcov: games(id, white_id, black_id, score) |
||
keeehi Profil |
#7 · Zasláno: 10. 10. 2009, 11:01:21 · Upravil/a: keeehi
Dobře, v tom případě bych potřeboval pomoct s návrhem databáze potřeboval bych v ní mít uložené jméno a příjmení hráče, potom partie (hráčA, hráčB, výsledek, datum) pro další statistiky (jak spolu nějací dva hráči postupně hráli) a nakonec ela - momentální elo, maximální elo, ale i ta předešlá ela s datumy, aby se mohl z něčeho tvořit graf, jak se daný hráč vyvíjel
budou teda 3 typy výstupů - tabulka všech hráčů obsahující: pořadí, jméno, příjmení,aktuální elo, maximální elo, počat výher, počet proher, počet remíz - graf hráče - osa x datum, osa y elo - tabulka vzájemných zápasů dvou hráčů: hráčA, hráčB, výsledek, datum vstup - hracA, hracB, výsledek, datum elo chci počítat po každé partii -> jeden vstup = změna ela u dvou hráčů Děkuji za pomoc |
||
tiso Profil |
#8 · Zasláno: 10. 10. 2009, 11:41:17 · Upravil/a: tiso
normalizovaná forma:
players(id,firstname,lastname) games(id, white_id, black_id, score, date_end) elo(id,player_id,elo,date_when) po denormalizácii: players(id,firstname,lastname,actual_elo,max_elo,win_num,loss_num,draw_num) games(id, white_id, black_id, score, date_end) elo(id,player_id,elo,date_when) |
||
Časová prodleva: 14 let
|
0