Autor | Zpráva | ||
---|---|---|---|
skeletonek Profil * |
#1 · Zasláno: 17. 6. 2012, 13:43:56
Zdravím, chtěl bych prosím poradit, jak můžu udělat tabulku, ve které se mi budou počítat automaticky body a tak samo bude se to srovnávat podle největšího bodu? Tabulku mám udělanou v databázi. Chci to zde na webu. http://beskydskaliga.info/vysledky.php Děkují všem za radu.
|
||
Jan Tvrdík Profil |
#2 · Zasláno: 17. 6. 2012, 13:55:12
skeletonek:
„Tabulku mám udělanou v databázi.“ Co třeba ukázat, jak ta tabulka v DB vypadá? |
||
skeletonek Profil * |
#3 · Zasláno: 17. 6. 2012, 14:03:36 · Upravil/a: Moderátor (editace znemožněna) 20. 6. 2012, 23:36:04
CREATE TABLE IF NOT EXISTS `muzi` ( `id` int(10) NOT NULL auto_increment, `poradi` varchar(10) default NULL, `druzstvo` varchar(20) default NULL, `jedna` varchar(10) default NULL, `dva` varchar(10) default NULL, `tri` varchar(10) default NULL, `ctyri` varchar(10) default NULL, `pet` varchar(10) default NULL, `sest` varchar(10) default NULL, `sedm` varchar(10) default NULL, `osm` varchar(10) default NULL, `devet` varchar(10) default NULL, `deset` varchar(10) default NULL, `jedenact` varchar(10) default NULL, `dvanact` varchar(10) default NULL, `trinact` varchar(10) default NULL, `ctrnact` varchar(10) default NULL, `patnact` varchar(10) default NULL, `celkem` varchar(10) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; doplňují "drustvo" to je název sboru, "poradi" dycky musím měnit podle toho jak mi vyjdou body "celkem" to je prázdné to tam nemá byt a jednotlivé buňky "jedna","dva","tri".... tam vyplnují body, kolik ten sbor během te soutěže získal a potom se mi to ve sloupci CELKEM sečte, ale chci, aby se mi to srovnávalo samo podle největšího čísla, čili pořadí |
||
Jan Tvrdík Profil |
|||
skeletonek Profil * |
#5 · Zasláno: 17. 6. 2012, 14:11:32
chci ukládat názvy sboru a jednotlivé body soutěží
chci aby se mi automaticky počítaly celkové body a chci aby se řadilo pořadí, rovněž automaticky s tím, že 1 místo má nejvíce bodů |
||
LaMMa Profil * |
#6 · Zasláno: 18. 6. 2012, 00:57:53
co maju byt tie nazvy jedna az patnact?
|
||
skeletonek Profil * |
#7 · Zasláno: 18. 6. 2012, 21:46:28
jednotlivé buňky pro zápis bodů ze soutěže. Každé číslo je přiřazené k datumu soutěže, kde budou body družstev. Fakt nevím jak víc to napsat.
|
||
final Profil * |
#8 · Zasláno: 18. 6. 2012, 21:57:48
prečo tam nenecháš len stĺpec bodyCelkovo?a vždy k tomu len pripočítavať body
|
||
skeletonek Profil * |
#9 · Zasláno: 18. 6. 2012, 22:15:30
jojo ten celkovy tam nemá být to tam je prázdné nepoužívám ho. PRakticky se mi ty kódy sčítají
<?php $bar = $zaznam["jedna"]+$zaznam["dva"]+$zaznam["tri"]+$zaznam["ctyri"]+$zaznam["pet"]+$zaznam["sest"]+$zaznam["sedm"]+$zaznam["osm"]+$zaznam["devet"]+$zaznam["deset"]+$zaznam["jedenact"]+$zaznam["dvanact"]+$zaznam["trinact"]+$zaznam["ctrnact"]; $bar = "$bar"; echo $bar;?> a pro dolování z DB mám tento script $vysledek=mysql_query("select * from muzi"); |
||
LaMMa Profil |
#10 · Zasláno: 18. 6. 2012, 23:31:42
navrh db teda nic moc, ale ked uz chces takto, tak tam nechaj aj ten celkovy a updatuj ho vzdy pri pridani nejakych bodov tymu.
potom select na vyber od najviac bodov po najmenej: SELECT * FROM `muzi` ORDER BY `celkem` DESC; |
||
skeletonek Profil * |
#11 · Zasláno: 19. 6. 2012, 15:16:54 · Upravil/a: skeletonek
Ale to jsem si moc nepomohl, protože se mi to bude řadit stejně jako když budu zadávat pořadí... Jenom budu složitěji zapisovat a počítat celkové body a to já nechci, já chci aby se mi to automaticky sčítalo a zároveň automaticky řadilo podle nejvyššího počtu bodu.
jo sorry měl jsem ten příkaz jinak udělaný a sice místo $vysledek=mysql_query("select * from muzi"); SELECT * FROM `muzi` ORDER BY `poradi` DESC; a takto to nechci |
||
Someone Profil |
#12 · Zasláno: 19. 6. 2012, 15:19:26
|
||
skeletonek Profil * |
#13 · Zasláno: 19. 6. 2012, 15:24:56
Dobrá, ale jak potom ten select mám udělat? když ji navrhnu lépe?
|
||
Kajman Profil |
Pak jednoduše použijte k součtu agregační funkci sum.
select id_zavodnika, sum(body) celkem from tabulka_s_body group by id_zavodnika order by celkem desc |
||
LaMMa Profil |
#15 · Zasláno: 19. 6. 2012, 16:40:19
"Ale to jsem si moc nepomohl, protože se mi to bude řadit stejně jako když budu zadávat pořadí... Jenom budu složitěji zapisovat a počítat celkové body a to já nechci, já chci aby se mi to automaticky sčítalo a zároveň automaticky řadilo podle nejvyššího počtu bodu."
Samozrejme, ze by si celkove body nepocital rucne ale spravil si na to jednoduchu funkciu, ktoru by si volal pri pridani/zmene bodov nejakeho zapasu. Poradie by si potom nemusel vobec vyplnovat. A ako riesis poradie, ked maju 2 tymi rovnaky pocet bodov? |
||
Skeletonek Profil * |
#16 · Zasláno: 19. 6. 2012, 21:22:26
Kajman Dekuji za typ,urcite to zkusim.
LaMMa ja to delam tak, ze se si to scita automaticky a poradi jsem doplnoval rucne, slozitym systemem. A to je na prd... Urcite zkusim co napsal Kajman |
||
max.max Profil |
#17 · Zasláno: 20. 6. 2012, 19:20:17 · Upravil/a: Moderátor (editace znemožněna) 20. 6. 2012, 20:58:28
Kajman:
Chápu to prosím správně?Že MySQL bude vypadat takto? CREATE TABLE tabulka_s_body( id_zavodnika INTEGER PRIMARY KEY, body_1 INTEGER DEFAULT 0, body_2 INTEGER DEFAULT 0, body_3 INTEGER DEFAULT 0) A ve výsledku to bude vypadat asi takhle že ano? S tím, že kurzívou budu zapisovat ručně a tučně se to budou přepočítavat samo? Tak nějak bych si to přál a tak to zamýšlím. A potom tvůj příkaz: select id_zavodnika, sum(body) celkem from tabulka_s_body group by id_zavodnika order by celkem desc |
||
Kajman Profil |
#18 · Zasláno: 20. 6. 2012, 20:56:54
Tabulka na zápis bodů by měla být spíše takto nějak.
CREATE TABLE tabulka_s_body ( id_zavodnika INTEGER NOT NULL, id_souteze INTEGER NOT NULL, body INTEGER DEFAULT 0, PRIMARY KEY (id_zavodnika, id_souteze) ) |
||
max.max Profil |
Kajman
Funguje to překrásně, je to paráda ! super, sám bych na to nepřišel ! Můžu ještě poprosit, kdybych to pořadí chtěl očislovat? první místo, druhé místo... inač paráda Děkují moc |
||
Kajman Profil |
#20 · Zasláno: 20. 6. 2012, 23:34:59
Prostě si přičtete jedničku.
<?php $poradi=1; while(nebo jiny cyklus) { echo $poradi++; } ?> |
||
max.max Profil |
#21 · Zasláno: 21. 6. 2012, 13:33:03 · Upravil/a: max.max
Nádhera. Běží jak hodinky, ale poslední prosba je, jak mám vypsat jednotlivé body? nedaří se mi to vypsat. Chci aby se mi vypsaly jednotlivé data z tabulky? Protože id_souteze budou závody a všichni id_zavodnika budou na id_souteze, ale chci je vypsat všechny id_zavodnika i id_souteze. zkoušel jsem to včera večer a nešlo mi to . Nevím jak na to. Děkují
<table width="200" border="1"> <tr> <td>poradi</td> <td>zavodnik</td> <td>soutez</td> <td>body</td> </tr><? // zde je include souboru s konstantami include("con.php"); $vysledek=mysql_query("select sbor, soutez, body, sum(body) celkem from body group by sbor order by celkem desc"); $poradi=1; while ($zaznam=MySQL_Fetch_Array($vysledek)): ?> <tr> <td><?{ echo $poradi++; } ?>.</td> <td><?echo $zaznam["sbor"]?></td> <td><?echo $zaznam["soutez"]?><?echo $zaznam["body"]?></td> <td><?echo $zaznam["celkem"]?></td> </tr> <? $sudy=!$sudy; endwhile; ?> </table> Takhle to mám zatím. |
||
juriad Profil |
#22 · Zasláno: 21. 6. 2012, 14:07:46
snažíš se zároveň získat dvě různé úrovně detailu (celý sbor; body v jednotlivých zápasech) a to moc dobře nejde
můžeš buď zahodit GROUP BY, a pak se budou přenášet duplicitně informace ve zbývajících sloupcích (ale také všechny body), nebo můžeš pro každý sbor položit do databáze další dotaz, nebo zachovej stávající (bez body) a přidej jeden dotaz pro body všech sborů a JOIN si proveď ručně v php (ORDER BY ti pomůže) nebo se podívej na GROUP_CONCAT (píše o něm Jakub Vrána, pozor na délku) poslední možnost používá rozšíření SQL, a nepovažuje se za úplně čistou (databáze má poskytovat data a relace, nemá se starat o formát výpisu) |
||
Kajman Profil |
#23 · Zasláno: 21. 6. 2012, 14:21:59
max.max:
Také můžete přidat do dotazu modifikaci with rollup, jednotlivé řádky dát v php do dvojrozměrného pole a teprve následně vypsat toto pole. A vypadá to, že do id si nedáváte obvyklý číselný identifikátor a nemáte číselník družstev a soutěží. Jinak nad původní neuniverzální tabulkou šlo řadit také, kdyby ty sloupce byly číselného typu... select ... (ifnull(`jedna`,0)+ifnull(`dve`,0)+ifnull(`tri`,0)) soucet ... order by soucet desc Těžko říct, jestli si to chcete naprogramovat "správně a univerzálně" nebo "špatným přístupem, ale rychle". |
||
max.max Profil |
#24 · Zasláno: 21. 6. 2012, 15:11:28 · Upravil/a: max.max
Kajman:
Tuhle variantu jsem zamýšlel, když jsem skládal ty stránky. Jenomže neměl jsem ty součty tabulek ve výpisu DB, ale ve vypísu PHP, takže součet jsem měl, ale neměl jsem to seřazené podle maximálního bodu. Zkusím něco vymyslet jak jste navrhl vy. Budu si s tím hrát, než na to přijdu. Může to být postavené takhle? $vysledek=mysql_query("select sbor, soutez,(ifnull(`jedna`,0)+ifnull(`dve`,0)+ifnull(`tri`,0)) celkem from body group by sbor order by celkem desc"); $poradi=1; while ($zaznam=MySQL_Fetch_Array($vysledek)): juriad: Jo to je taky možnost, kdybych na nic nepřišel, vyzkouším Vaši variantu, ta by měla jit na 90% Budu si s tím hrát večer, ale i Vám děkují za odpověď |
||
Časová prodleva: 12 let
|
0