Autor Zpráva
travis
Profil *
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
$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 *
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
travis:
ORDER BY nepomůže?
AM_
Profil
tak mě napadá, jaký smysl má k datu přičítat nula dní?
travis
Profil *
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 *
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
no, kdybys napsal jen CURDATE(), je to totéž
AM_
Profil
[#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 *
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 *
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
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 *
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
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 *
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
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 *
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
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

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