Autor Zpráva
Andrej.B
Profil
Zdravim,

snazim sa vybrat vsetky zaznamy z tabulky cinnost_cistenie, podla urcitych kriterii
1. cinnost_cistenie_stroj = stroj, ku ktoremu chcem pridat zaznam = napriklad id 1 mam na to Group BY nazov_cinnost_cistenie aby som ich zobrazil len raz

Pekne mi zobrazi len tie cinnosti, ktore mam ku kontretnemu stroju /stroje 1-19 maju rovnake a stroj 24 ma ine cinnosti/

POtrebujem k tomu prihodit este podmnienku z tabulky zaznam_cistenie - ak v nej najde datum zaznamu tej id_cinnost_cistenie, ktory je vaccsi ako terajsi datum -8 hodin, tak nech ho vo vysledku nezobrazuje. Mam ho ako unixtimestamp.

Mam napriklad select:
SELECT cc.nazov_cinnost_cistenie,cc.id_cinnost_cistenie,ccc.cas_cinnost_cas,ccs.id_cinnost_cistenie
FROM cinnost_cistenie cc
JOIN cinnost_cistenie_stroj ccs ON ccs.id_cinnost_cistenie= cc.id_cinnost_cistenie
JOIN cinnost_cistenie_cas ccc ON ccc.id_cinnost_cistenie= cc.id_cinnost_cistenie

WHERE ccs.id_stroj= 1 
GROUP BY cc.nazov_cinnost_cistenie 
ORDER BY cc.id_cinnost_cistenie ASC

ten zobrazi vsetky cinnosti, ktore ma ten stroj pri sebe a ich casovy ramec... Ako k tomu dat este tu podmienku z tabulky zaznam_cistenie terajsi datum -8 hodin?

Dal som to na sqlfiddle.com/#!9/60757d/10 ... Ak by sa dalo niekomu na to kuknut... Bude tam treba zmenit mozno ten datum, nakolko priklad je z /1626211665/ 13.07.2021 - 23:27:45 ...

Dakujem
Kajman
Profil
Můžete např. zkusit připojit left joinem časy do osmi hodin a pak vyfiltrovat ty řádky, kde se takový čas žádný nenašel (v připojené tabulce bude u not null sloupce null hodnota).
SELECT cc.nazov_cinnost_cistenie,cc.id_cinnost_cistenie,ccc.cas_cinnost_cas,ccs.id_cinnost_cistenie
FROM cinnost_cistenie cc
JOIN cinnost_cistenie_stroj ccs ON ccs.id_cinnost_cistenie= cc.id_cinnost_cistenie
JOIN cinnost_cistenie_cas ccc ON ccc.id_cinnost_cistenie= cc.id_cinnost_cistenie
                             AND ccc.id_stroj= ccs.id_stroj
LEFT JOIN zaznam_cistenie zc ON zc.id_cinnost_cistenie= ccs.id_cinnost_cistenie
                            AND zc.id_stroj= ccs.id_stroj
                            AND zc.datum_zaznam_cistenie>(1626211665-8*60*60)
WHERE ccs.id_stroj= 1
  AND zc.id_cinnost_cistenie IS NULL
ORDER BY cc.id_cinnost_cistenie ASC
Andrej.B
Profil
Unbelievable.

Zda sa mi, ze som si odkusol prilis velke susto, ale tu mi vzdy dobre poradite.

Casovy ramec som dopisal podla toho, co je pri kazdej cinnosti nastavene a pridal id_user, ktory to vsetko zapisuje.

SELECT cc.nazov_cinnost_cistenie,cc.id_cinnost_cistenie,ccc.cas_cinnost_cas,ccs.id_cinnost_cistenie
FROM cinnost_cistenie cc
JOIN cinnost_cistenie_stroj ccs ON ccs.id_cinnost_cistenie= cc.id_cinnost_cistenie
JOIN cinnost_cistenie_cas ccc ON ccc.id_cinnost_cistenie= cc.id_cinnost_cistenie
                            AND ccc.id_stroj= ccs.id_stroj
LEFT JOIN zaznam_cistenie zc ON zc.id_cinnost_cistenie= ccs.id_cinnost_cistenie
                            AND zc.id_stroj= ccs.id_stroj
                            AND zc.datum_zaznam_cistenie>(UNIX_TIMESTAMP()-ccc.cas_cinnost_cas*60*60)
                            AND zc.id_user= $id_user
WHERE ccs.id_stroj= $id_stroj
AND zc.id_cinnost_cistenie IS NULL
ORDER BY cc.id_cinnost_cistenie ASC

Dakujem moc.

Andrej
Kajman
Profil
Moc nechápu tu podmínku na uživatele. Když ten stroj před chvíli čistil Pepa, proč by ho měl čistit ještě Franta?
Andrej.B
Profil
ked sa prihlasi dalsi uzivatel na inej smene, nakolko hodnota skoro kazdej cinnosti je 8 hodin, co je aj jedna smena. Ranna, pooobedna, nocna - 3 rozne smeny, 3 rozne loginy, na jeden login su 3-4 operatori, preto ta podmienka, ak uz je cinnost zaznamenana, za poslednych 8 hodin, toho loginu, aby ,mu to neukazovalo a nemohol zapisat, treba to urobit co najviac blbovzdorne a nemoznost to obist, dopisovat za inych a podobne.

Doteraz sa to robi na papier (tony papiera a nemoznost automatickej kontroly) a takto by bol nad tym lepsi prehlad. Hlavne ked pride auditor, ktory sa v tom dost vrta :)

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