Autor Zpráva
Andrej.B
Profil
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
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
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
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:

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