Report pro všechny vlastní události

Tipy a návody pro tvorbu vlastních sestav a výstupů z TNG.
Falt
Příspěvky: 405
Registrován: 30 srp 2013 23:48
Kontaktovat uživatele:

Report pro všechny vlastní události

Příspěvekod Falt » 17 dub 2018 18:13

Zjistil jsem, že mi chybí ve výzbroji nástroj pro zobrazení všech vlastních událostí. A to mě hnětlo. Ukázalo se, že jeho sestavení překračuje moje dosavadní vědomosti o SQL, proto jsem se obrátil na experta. Ukázalo se, že výsledný report je velice rychlý, a poskytuje přehled o všech vlastních událostech, uspořádaný podle popisu události a ID osoby (řazení si může každý upravit podle vlastní potřeby, třeba podle data události apod).
Výsledný SQL dotaz pro tento Report:

SELECT
personID, firstname, lastname, note, eventdate, tng_eventtypes.display AS Popis
FROM tng_notelinks
join tng_events on tng_events.eventID=tng_notelinks.eventID
join tng_xnotes on tng_xnotes.ID=tng_notelinks.xnoteID
join tng_people on tng_people.personID=tng_notelinks.persfamID
join tng_eventtypes on tng_eventtypes.eventtypeID=tng_events.eventtypeID
order by display,personID


Pro praktické využití bude asi rozumné si výstup uložit jako CSV soubor a otevřít třeba v Libre Office k dalšímu zpracování.
Pozn.: Zatím jsem nikde na podobné řešení nenarazil.

Uživatelský avatar
michal
Příspěvky: 731
Registrován: 06 čer 2013 21:37
Bydliště: Hostinné
Kontaktovat uživatele:

Re: Report pro všechny vlastní události

Příspěvekod michal » 17 dub 2018 21:47

Ve své databázi TNG v tabulkách, jichž se vyhledávácí dotaz týká, mám následující počet záznamů:
tng_people 7953
tng_events 14122
tng_eventstypes 65
tng_notelinks 1131
tng_xnotes 1131
Po aplikaci vašeho příkazu bylo výsledkem 65 záznamů, což se mi nezdá...

Donutil jste mě přemýšlet...

Navrhnul bych modifikaci:
Select tng_people.lastname, tng_people.firstname, tng_events.*, tng_eventtypes.tag, tng_eventtypes.display, tng_xnotes.note
from tng_people
inner join tng_events on tng_events.persfamID=tng_people.personID
inner join tng_eventtypes on tng_eventtypes.eventtypeID=tng_events.eventtypeID
left join tng_notelinks on tng_events.eventID=tng_notelinks.eventID
left join tng_xnotes on tng_notelinks.xnoteID=tng_xnotes.ID
where tng_events.parenttag=''

Poznámky:
- vybíraná pole jsem tam nastrkal jan tak, nějaká, uzpůsobit lze podle potřeby
- v klauzuli WHERE je parenttag='' proto, že v opačném případě tam jsou uloženy tagy BIRT, CHR, DEAT, BURI, čili se nejedná o vlastní události
- LEFT JOINy tam jsou proto, že ne každá událost (alespoň v mém případě) má k sobě připojenou poznámku
- příkaz, mrcha, chvilku trvá než doběhne do konce (45 vteřin). Nějaký expert na mySQL to určitě umí doladit. Já jsem jen lehce poučený laik...

Výsledkem je 11209 záznamů a to už se mi líbí víc (i po zběžném prohlédnutí v phpmyadmin).

Falt
Příspěvky: 405
Registrován: 30 srp 2013 23:48
Kontaktovat uživatele:

Re: Report pro všechny vlastní události

Příspěvekod Falt » 17 dub 2018 22:52

Obávám se, že Vám k tomu mnoho podnětného nepovím. Především jsem nezdůraznil, že u všech vlastních událostí využívám poznámky. Z toho plyne, že u uživatele, který naopak poznámky málo vytěžuje, nebude "můj" report to pravé ořechové, to je bez debaty, protože nezahrne události bez poznámek.

Protože jsou u mne pole s poznámkami často využitá, nebylo potřeba použít pomalý příkaz leftjoin (události bez poznámky mne nezajímají). A s příkazem join mi to vysype na 900 vlastních událostí s neprázdným polem poznámek během necelé vteřiny.

Z Vaší odpovědi je zřetelné, že popsané řešení není univerzální, zejména pro uživatele, který s poznámkami pracuje "střízlivě". Přesto doufám, že někomu pomůže nebo jej bude inspirovat k vytvoření klonu pro situaci Vámi popisovanou, anebo jej přivede k širšímu využití aparátu poznámek. Jsme na diskusním fóru a je na každém, jakou cestou se v praxi vydá. Můžeme jen nabídnout možné postupy. :|


Zpět na “Reporty”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů