Autor | Zpráva | ||
---|---|---|---|
travis Profil * |
#1 · Zasláno: 1. 11. 2010, 18:50:46
Potřeboval bych zjednodušit výpis statistik. Máte někdo nějaký nápad?
$stat_adm_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='ADM'"); $stat_sel_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='SEL'"); $stat_buy_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='BUY'"); $stat_adv_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='ADV'"); $stat_exp_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='EXP'"); $stat_res_1day = mysql_query("SELECT * FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND ukol_kategorie='RES'"); $radek_stat_adm_1day = mysql_num_rows($stat_adm_1day); $radek_stat_sel_1day = mysql_num_rows($stat_sel_1day); $radek_stat_buy_1day = mysql_num_rows($stat_buy_1day); $radek_stat_adv_1day = mysql_num_rows($stat_adv_1day); $radek_stat_exp_1day = mysql_num_rows($stat_exp_1day); $radek_stat_res_1day = mysql_num_rows($stat_res_1day); $radek_stat_all_1day = $radek_stat_res_1day + $radek_stat_exp_1day + $radek_stat_adv_1day + $radek_stat_buy_1day + $radek_stat_sel_1day + $radek_stat_adm_1day; echo "<td>".$radek_stat_adm_1day."</td>"; echo "<td>".$radek_stat_sel_1day."</td>"; echo "<td>".$radek_stat_buy_1day."</td>"; echo "<td>".$radek_stat_adv_1day."</td>"; echo "<td>".$radek_stat_exp_1day."</td>"; echo "<td>".$radek_stat_res_1day."</td>"; echo "<td>".$radek_stat_all_1day."</td>"; |
||
tiso Profil |
#2 · Zasláno: 1. 11. 2010, 18:56:27
$query="SELECT ukol_kategorie, count(ukol_kategorie) as pocet FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY ukol_kategorie"; |
||
travis Profil * |
#3 · Zasláno: 1. 11. 2010, 19:20:24
Tak jsem udělal něco takového, ale teď nevím jak ty data řadí. Dá se to v tomto případě seřadit a vypsat v tabulce?
$stat2 = mysql_query("SELECT ukol_kategorie, count(ukol_kategorie) as pocet FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY ukol_kategorie"); while ($radek3 = mysql_fetch_array($stat2, MYSQL_ASSOC)) { $pocet = $radek3['pocet']; echo (' <td>'.$pocet.'</td> '); } |
||
SwimX Profil |
#4 · Zasláno: 1. 11. 2010, 19:27:01
travis:
ORDER BY nepomůže?
|
||
AM_ Profil |
#5 · Zasláno: 1. 11. 2010, 19:34:58
tak mě napadá, jaký smysl má k datu přičítat nula dní?
|
||
travis Profil * |
#6 · Zasláno: 1. 11. 2010, 19:35:30
To šlo udělat a taky jsem to hned zkusil, ale všude kde jsou nulové hodnoty, nic nezobrazí. A to pak ta tabulka přestane dávat smysl , protože zobrazí různý počet buňek (<td>) v jedné tabulce. Co myslíte?
|
||
travis Profil * |
#7 · Zasláno: 1. 11. 2010, 19:38:10
AM:
„tak mě napadá, jaký smysl má k datu přičítat nula dní?“ Zobrazuje všechny hodnoty za dnešní den. Vybírám tím záznamy od dnešního dne. tzn do minulý den, týden, měsíc atd. |
||
AM_ Profil |
#8 · Zasláno: 1. 11. 2010, 19:45:36
no, kdybys napsal jen CURDATE(), je to totéž
|
||
AM_ Profil |
#9 · Zasláno: 1. 11. 2010, 19:48:33
[#6] travis
z tvého scriptu to vypadá, že tabulka má pouze jeden řádek, který vypisuje. Pokud bys chtěl vypisovat i kategorie, které neobsahují žádné úkoly, musel bys to řešit jinak (třeba si počty úkolů nejdřív namapovat do pole kategorií, nebo mít v databázi tabulku kategorií a číst to LEFT JOIN atd...) |
||
travis Profil * |
#10 · Zasláno: 1. 11. 2010, 20:11:34
AM:
„no, kdybys napsal jen CURDATE(), je to totéž“ Aha, díky. Budu tam používat různé časové rozmezí, tak jsem si to nechtěl moc komplikovat. „z tvého scriptu to vypadá, že tabulka má pouze jeden řádek, který vypisuje. Pokud bys chtěl vypisovat i kategorie, které neobsahují žádné úkoly, musel bys to řešit jinak (třeba si počty úkolů nejdřív namapovat do pole kategorií, nebo mít v databázi tabulku kategorií a číst to LEFT JOIN atd...)“ Budu to ještě muset pořešit, v každém případě díky za rady. |
||
travis Profil * |
#11 · Zasláno: 2. 11. 2010, 14:57:14
Zkoušel jsem to nějak takhle s podmínkou ale nefunguje to :
$stat3 = mysql_query("SELECT ukol_kategorie, count(ukol_kategorie) as pocet2 FROM ukol WHERE ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY ukol_kategorie ORDER BY ukol_kategorie;"); while ($radek4 = mysql_fetch_array($stat3, MYSQL_ASSOC)) { $pocet2 = $radek4['pocet2']; if ($pocet2>0) {echo ('<td>'.$pocet2.'</td>');} else {echo ('<td>0</td>'); } } |
||
AM_ Profil |
#12 · Zasláno: 2. 11. 2010, 16:18:49 · Upravil/a: AM_
travis:
„nefunguje to“ je to rozbité. //a navíc je to nějaké divné, podívej se sám na tu podmínku: pokud je $pocet2>0, vypíše to $pocet 2. pokud je =0, vypíše to 0. Něco mi říká, že ta podmínka vlastně nic nedělá a prostě se vypíše $pocet2. |
||
travis Profil * |
#13 · Zasláno: 2. 11. 2010, 16:35:38
Zkoušel jsem to přes další tabulku jak jsi mi poradil, ale stále mi to vybírá jen nenulové hodnoty.
$stat5 = mysql_query(" SELECT ukol.ukol_kategorie,COUNT(ukol.ukol_kategorie) FROM ukol LEFT JOIN kategorie ON ukol.ukol_kategorie=kategorie.Kategorie WHERE ukol.ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY ukol.ukol_kategorie ORDER BY ukol.ukol_kategorie; "); while ($radek5 = mysql_fetch_array($stat5)) { echo ('<td>'.$radek5['COUNT(ukol.ukol_kategorie)'].'</td>'); } |
||
AM_ Profil |
#14 · Zasláno: 2. 11. 2010, 16:54:29
máš to obráceně, vybírej z kategorie a k ní LEFT JOINuj ukol, pak by to mělo fungovat. GROUP BY musíš pak taky jet přes tabulku kategorie a ne ukol.
|
||
travis Profil * |
#15 · Zasláno: 2. 11. 2010, 22:34:58
Pořád to samý...
$stat5 = mysql_query(" SELECT kategorie.id, COUNT(kategorie.kategorie) FROM kategorie LEFT JOIN ukol ON ukol.ukol_kategorie=kategorie.kategorie WHERE ukol.ukol_datum BETWEEN DATE_ADD(CURDATE(), INTERVAL 0 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY kategorie.kategorie ORDER BY kategorie.kategorie; "); while ($radek5 = mysql_fetch_array($stat5)) { echo ('<td>'.$radek5['COUNT(kategorie.kategorie)'].'</td>'); } |
||
AM_ Profil |
#16 · Zasláno: 2. 11. 2010, 22:42:57
počítat ale musíš úkoly, ne kategorie :) jakmile do COUNT() dáš ukol.id nebo jiný unikátní identifikátor, mělo by to fungovat.
samozřejmě také u kategorií, ve kterých není žádný úkol, bude v téhle relaci ukol.ukol_datum rovno NULL, takže do WHERE musíš dát OR ukol.ukol_datum IS NULL. |
||
travis Profil * |
#17 · Zasláno: 2. 11. 2010, 22:53:48
Stále beze změny. Musí tam ještě něco být. Můžu tám dát cokoliv, třeba hvězdičku, stále zobrazuje jen nenulové hodnoty.
|
||
AM_ Profil |
#18 · Zasláno: 3. 11. 2010, 11:29:21
A když odstraníš celý WHERE, tak taky? pokud se to tím spraví, máš chybu ve WHERE (špatně uzávorkované podmínky nebo něco
|
||
Časová prodleva: 14 let
|
0