Autor | Zpráva | ||
---|---|---|---|
BunnyBugs Profil * |
#1 · Zasláno: 24. 4. 2014, 23:33:07
Dobrý večer ... člověk se fakt stále učí :) ... mám zase jeden dotaz.
Mám tabulku (MySQL) a v ní sloupce `datum`, `počet`, ...atd. Výpis všech řádků pomocí cyklu WHILE a řazení dle data, případně dle rozmezí data a celkové součty sloupců SUM() to není problém. Otázka však spočívá v tom, jak veškerá data vypsat cyklem za jednotlivé měsíce a jejich vypsání? ... mělo by to vypadat asi takhle: ROK 2013 / součet celkem / leden / součet / únor / součet / atd... ROK 2014 / Součet celkem / leden / součet / únor / součet atd... určitě by to šlo podmíněnými dotazy s předvyplněnými názvy měsíců, ale ne v každý měsíc obsahuje záznam(y), takže bych měl zbytečně prázdné řádky a asi i zbytečně moc dotazů. Lze toto provést nějakým cyklem? Děkuji moc za každé nakopnutí, fakt už si nevím rady. |
||
juriad Profil |
#2 · Zasláno: 24. 4. 2014, 23:34:46
|
||
BunnyBugs Profil * |
#3 · Zasláno: 25. 4. 2014, 00:11:58
No, mně ani tak nejde o ty nadpisy, ale o to, aby mi to nevypsalo jednotlivé záznamy daného měsíce, ale jen součty po měsících.
Takže ne toto: 2014 leden / 1.1.2014 / 20 leden / 3.1.2014 / 35 únor / 5.2.2014 / 11 únor / 8.2.2014 / 9 atd.... ale mělo by to vypsat součty do jednoho řádku daného měsíce, tedy nějak takto: leden / 55 únor / 20 atd... |
||
Alphard Profil |
#4 · Zasláno: 25. 4. 2014, 07:11:51
Na úrovní MySQL použitejte
sum(castka) + group by year(datum), month(datum) .
|
||
Kajman Profil |
#5 · Zasláno: 25. 4. 2014, 08:39:49
V mysql se dají rovnou spočítat i součty za roky...
SELECT * FROM (SELECT Year(datum) rok, Month(datum) mesic, Sum(pocet) soucet FROM tabulka GROUP BY Year(datum), Month(datum) WITH ROLLUP) t WHERE rok IS NOT NULL ORDER BY rok, mesic |
||
BunnyBugs Profil * |
#6 · Zasláno: 25. 4. 2014, 18:55:04 · Upravil/a: BunnyBugs
Kajman:
Skvělé a funkční řešení, ale protože jsem tohle seskupování ještě nedělal, nevím, jak to vypsat do přesného formátu. Když to vypíšu takto: while ($rowquery = mysql_fetch_array($query)) { echo '<table>'; echo '<tr><td>Rok</td><td>'.$rowquery['rok'].'</td><td>'.$rowquery['soucet'].'</td></tr>'; echo '<tr><td>Měsíc</td><td>'.$rowquery['mesic'].'</td><td>'.$rowquery['soucet'].'</td></tr>'; echo '</table><br>'; } mám to v takovémhle formátu: Rok / 2013 / 50 Měsíc / nic / 50 Rok / 2013 / 20 Měsíc / 1 / 20 Rok / 2013 / 30 Měsíc / 2 / 30 ...atd ale já bych to potřeboval vypsat trochu úhledněji a to takto: Rok / 2013 / 50 Měsíc / 1 / 20 Měsíc / 2 / 30 ...atd Jak tedy mám takový výpis sestavit? Díky moc za radu. Tak jsem to vymyslel takto: echo '<table>'; while ($rowquery = mysql_fetch_array($query)) { if ($rowquery['mesic'] == "") { echo '<tr><td colspan="2"><h2>Rok '.$rowquery['rok'].'</h2></td></tr>'; echo '<tr><th>Celkem</th><th>'.$rowquery['soucet'].'</th></tr>'; } else { echo '<tr><td>'.cz_mesic_neskl($rowquery['mesic']).'</td><td>'.$rowquery['soucet'].'</td></tr>'; } } echo '</table><br>'; Funguje to, jak má, ale je to tak správně?, nebo to lze vypsat něja kulantněji? |
||
Kajman Profil |
#7 · Zasláno: 25. 4. 2014, 20:11:35
Ano, součty za rok mají prázdný měsíc.
|
||
Časová prodleva: 4 dny
|
|||
BunnyBugs Profil * |
#8 · Zasláno: 30. 4. 2014, 01:59:49
[#5] Kajman
Prosím, mám k tomuto ještě dotaz. Lze toto ještě nějak podmínit, aby mi to vypsalo třeba dva, tři... součty, pomocí WHERE jiného sloupce? Tzn., že první součet bude třeba podle vedlejšího sloupce, který má třeba číslo 5, dlaší bude součet podle sloupce s číslem 8, apod. Asi nějak takto: Rok / 2013 / (sloupec 1) 50 / (sloupec 2) 40 / (sloupec 3) 120 / ...atd Měsíc / 1 / (sloupec 1) 20 / (sloupec 2) 15 / (sloupec 3) 80 / ...atd Měsíc / 2 / (sloupec 1) 30 / (sloupec 2) 25 / (sloupec 3) 40 / ...atd Zkoušel jsem to různě, ale nevím, jak to přesně napsat, pokud to tedy lze. Můžete mi prosím ještě pomoci? Děkuji moc |
||
Kajman Profil |
BunnyBugs:
Těžko se to z toho popisu chápe. Nejsem si jistý, co chcete, pokud potřebujete součty sloupce pocet rozdělené za rok, měsíc plus např. podle uživatele, tak ten třetí sloupec (např. s idetinfikací uživatele) dáte také do group by. Poskládat data do tabulky o proměnném počtu sloupců ale musíte až v php. Pokud toužíte po něčem jiném, zkuste nachystat příklad dat a chtěný výsledek. |
||
BunnyBugs Profil * |
#10 · Zasláno: 30. 4. 2014, 11:02:36 · Upravil/a: BunnyBugs
No já nevím, jak to mám napsat.
Váš výše uvedený příklad mi vypíše součet daného sloupce v Mysql, tedy např. sloupec `vydaj1` nebo když rozšířím dotaz na další sloupec, třeba `vydaj2`, vypíše mi to i druhý sloupec. Pokaždé to ale vypíše úplní součet daného sloupce a já bych potřeboval, aby mi to sečetlo a vypsalo jen sumu podle toho, co je uvedeno v dalším sloupci. Takže asi takto: SUM(`vydej1`) AS 'soucet1' WHERE `sloupec3` = 'Materiál ', SUM(`vydej1`) WHERE `sloupec3` = 'Zboží', atd.... Samozřejmě jsem to vypsal jednodušeji, ale něco v tomhle smyslu bych potřeboval. Tedy aby se mi nesečetl celý sloupec, ale jen podle podmínky v jiném sloupci. Nevím, jak to do toho dotazu [#5] Kajman dostat :( V tom druhém SUM jsem zapomněl napsat ještě AS 'soucet2'
|
||
Kajman Profil |
#11 · Zasláno: 30. 4. 2014, 11:09:38
SELECT Year(datum) rok, Month(datum) mesic, sloupec3, Sum(vydej1) soucet FROM tabulka GROUP BY Year(datum), Month(datum), sloupec3 WITH ROLLUP |
||
BunnyBugs Profil * |
#12 · Zasláno: 30. 4. 2014, 11:38:12
Kajman:
Tohle mi ale řeší zase jen jeden sloupec, to dle podmínky už fungovalo, ale já potřebuji, aby mi to vypsalo za sebe třeba sloupce tři a každý s jinou podmínkou. To právě nevím, jak ten dotaz sestavit :( Prosím kdyžtak o znění celého dotazu, bude-li to možné. Děkuji moc. |
||
Kajman Profil |
#13 · Zasláno: 30. 4. 2014, 13:38:58
Zkoušel jste ten dotaz? Všechna data by tam měla být. Jen nejsou v jednom řádku, to si přeskládejte v php. Podle ...atd to totiž vypadá na proměnný počet sloupců a toho jen v sql nedosáhnete.
|
||
BunnyBugs Profil * |
#14 · Zasláno: 30. 4. 2014, 15:54:56 · Upravil/a: BunnyBugs
Kdepak, počet sloupců je stálý. Důležité pro tento případ je sloupec `vydaj` a sloupec `typ_platby`, kde `vydaj` je DECIMAL 10,2 (sumy, které se sčítají) a `typ_platby` který je VARCHAR a jsou v něm přednastavené hodnoty výběrem SELECT ve formuláři (Materiál, Zboží, PHM, atd.)
A proto bych chtěl udělat výpis, kde budu mít rozděleny a sečteny sloupce z `typ_platby` něco jako toto: SELECT * FROM (SELECT Year(datum) rok, Month(datum) mesic, Sum(prijmy) soucetprijmy, SUM(vydaje) soucetvydaje FROM tabulka GROUP BY Year(datum), Month(datum) WITH ROLLUP) t WHERE rok IS NOT NULL ORDER BY rok, mesic Jen s tím rozdílem, že v uvedeném příkladu jsou prijmy a vydaje pevny sloupec, který sčítá od prvního řádku do posledního, ale já bych právě potřeboval, aby mi to sečetlo sumy jen je ty, co v pevně daném sloupci `typ_platby` je uveden třeba 'materiál', ostatní do součtu nezahrnovat. Stejně tak i ostatní příjmy, kde `typ_platby` je 'zboží', 'PHM', atd.... Prostě nevím, jak tam dostat tu podmínku WHERE. Pokud by šlo o výpis jednoho sloupce, tak to funguje takto: SELECT * FROM (SELECT Year(datum) rok, Month(datum) mesic, Sum(prijmy) soucetprijmy FROM tabulka WHERE `typ_platby` = 'Materiál' GROUP BY Year(datum), Month(datum) WITH ROLLUP) t WHERE rok IS NOT NULL ORDER BY rok, mesi to je odzkoušené, ale chci-li vypsat více sloupců, které se mi právě sečtou jen pokud je v sloupci `typ_platby` uveden konkrétní údaj, to se mi bohužel nedaří :( |
||
Časová prodleva: 10 let
|
0