Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 12. 9. 2019, 21:42:28
Zdravim,
na sqlfiddle.com/#!9/7d3c8b/8 mam 2 tabulky, ktore potrebujem zobrazit na stranke takto: Kotrola filtračného zariadenia - datum1, datum2, datum3 Čistenie valcov - datum1, datum2 Teraz is to viem zobrazit len ako: Kotrola filtračného zariadenia - datum1 Kotrola filtračného zariadenia - datum2 Kotrola filtračného zariadenia - datum3 Čistenie valcov - datum1 Čistenie valcov - datum2 atd. Na skusku robim rok 2019 a mesiac 9, kde mam najviac vzoriek. Ako mam ten SQ dotaz vypadat aby mi to v jednom kroku zobrazilo ako potrebujem Dakujem |
||
Kajman Profil |
Ta logika přeskládání z řádků do sloupců patří do aplikačního gridu, který data zobrazuje.
Lze ty datumy jen splácnout do jednoho stringu díky dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat |
||
Andrej.B Profil |
Ide o to, ze si neviem urobit ten select... Pokial by som si len vytiahol vsetky cinnosti a k nim priradil datumy, to dam, klasika, len by mi zobrazovalo aj tie cinnosti, ktore sa nevykonali v tom mesiaci. Len bez datumu. Ale nie vzdy budu v tom mesiaci vsetky činnosti, takze len zobrazit tie, co sa vykonali a k nim pridat datumy.. pride mi to prehladnejsie, ked bude pripadna kontrola. Cinnosti bude okolo 40 a budú narastať v case ako bude potrebne.
Diky Ps: vypis na stranke mam klasicky cez php... je webova aplikácia |
||
Kajman Profil |
#4 · Zasláno: 13. 9. 2019, 08:11:08
Dotaz máte funkční (jen je nevhodná podmínka na datum, protože nepoužije případný index), stačí jen upravit výpis v aplikaci (např. php), aby činnost vypsal jen jednou, pokud se její id shoduje.
Nadpis skupiny Je to vhodnější, pokud budete chtít mít datum např. klikací k zobrazení detailu. Pokud stačí holý výpis dat oddělených např. čárkou, můžete použít ten zmíněny group_concat... SELECT su.id_cinnost_udrzba, cu.meno_cinnost_udrzba, Group_concat(su.datum_stat_udrzba ORDER BY su.datum_stat_udrzba) datumy FROM stat_udrzba su JOIN cinnost_udrzba cu ON cu.id_cinnost_udrzba = su.id_cinnost_udrzba WHERE su.datum_stat_udrzba BETWEEN Unix_timestamp('2019-09-01 00:00:00') AND Unix_timestamp('2019-09-30 23:59:59') GROUP BY su.id_cinnost_udrzba, cu.meno_cinnost_udrzba ORDER BY cu.id_cinnost_udrzba ASC |
||
Andrej.B Profil |
Kajman:
Vypada to dobre, len este ako donutit vypis na pekny datum z Timestamp... while($row_sum = $result->fetch_array()) { $timestamp=$row_sum['datumy']; $lokalni_datum = new DateTime(null, new DateTimeZone('Europe/Bratislava')); $lokalni_datum->setTimestamp($timestamp); echo $row_sum['meno_cinnost_udrzba']; echo ' - '; //echo $row_sum['datumy']; // vsetky ale ako timestamp echo $lokalni_datum->format("d.m.Y"); // iba jeden echo '<br>'; } Pokial tam zostava to echo $row_sum['datumy']; vypise vsetky datumy oddelene ciarkou, myslel som, ze staci naformatovat, ako vidno vyssie, ale berie to len, ak je tam datumov viac, len jeden z nich... Ten vysledok cez Group_concat je ako jeden string? Ako to rozdelit na viac? Ako zobrat ten $row_sum['datumy']; nasekat na jednotlive datumy a tie potom cez funkcciu naformatovat na citatelny? diky Andrej.B: ale som blby... $parserer = explode(',', $row_sum['datumy']); foreach ($parserer as $casy) { $timestamp = new DateTime(null, new DateTimeZone('Europe/Bratislava')); $timestamp->setTimestamp($casy); echo $timestamp->format("d.m.Y"); } Inak cez ten starsi link /nadpis skupiny/ som to akosi nepochopil, ze co sa da s tym robit... |
||
Kajman Profil |
Potřetí píši, že je lepší si z db stáhnout více řádků. Tu činnost (nadpis) vypsat jen jednou, datumy vždy.
Je to lepší, než data seskupovat a pak rozdělovat. |
||
Kajman Profil |
#7 · Zasláno: 13. 9. 2019, 14:36:33
Andrej.B:
„Inak cez ten starsi link /nadpis skupiny/ som to akosi nepochopil“ Pamatujete si činnost (id_cinnost_udrzba) z předešlého řádku a pokud je stejná, tak už nadpis (nebo třeba nový řádek tabulky) neděláte. |
||
Andrej.B Profil |
#8 · Zasláno: 13. 9. 2019, 16:11:16
Kajman:
to je to, co nechapem... a to je to, co funguje s tym Group_concat ... Proste to neviem naformatovat z toho vysledku cez php... toto je moj kod, ktory funguje a je z Vasho Selectu vyssie: while($row_sum = $result->fetch_array()) { echo '<tr>'; echo '<td width="30%">'; echo $row_sum['meno_cinnost_udrzba']; echo '</td>'; echo '<td>'; $parserer = explode(',', $row_sum['datumy']); foreach ($parserer as $casy) { $timestamp = new DateTime(null, new DateTimeZone('Europe/Bratislava')); $timestamp->setTimestamp($casy); echo '<button class="'.$menu_color_odkazy_stat_day.'" title="'.$timestamp->format("H:i:s").'">'; echo $timestamp->format("d.m.Y"); echo '</button> '; } a takto nejakom vypada na zobrazeni, vybrate len tie, co sa v tom mesiaci naozaj urobili a zapisali: |
||
Časová prodleva: 5 let
|
0