Zkusim se jeste zeptat, protoze za zeptani nic nedam.....ciste nahodou extension dll pro SQLite s funkcema pro výchozí azimut z bodu do bodu a vzdalenost dvou bodu pocitane dle Vincentyho formule asi nikdo mit nebudete, co??
Geoget SQL
#61
Publikováno 25 září 2015 - 12:58
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#62
Publikováno 25 září 2015 - 17:18
Snažím se přilinkovat v SQLiteStudio zlib knihovnu, abych si mohl číst logy (geolog.logtext). Takže jsem si stahnul zlib1.dll knihovnu a snažím se ji pomocí
SELECT load_extension('.\zlib1.dll');přilinkovat. Bohužel tehle dotaz končí na
Error while executing SQL query on database 'tarmara': Uvedená procedura nebyla nalezena.Knihovna je přímo v té cestě, jinou knihovnu se mi přilinkovat daří. Pokud si dám dohledat závislosti v Dependency Walker, tak mi to žádnou chybu nehlásí. Nepřihodilo se tohle někomu z vás? Třeba při práci na GeoGetu?
něco takovédleho nestačí?
SELECT id FROM geolog WHERE finder='%CACHER%' and unzlib(logtext) LIKE '%%TEXT%%';
mě to tak funguje. nebo jsem nepochopil zadání
#63
Publikováno 25 září 2015 - 18:26
to ale funguje ve skriptech, ktere maji pristup ke geogetim UDFkum... ne v cizim programu.
#64
Publikováno 25 září 2015 - 19:17
Dekuju ti nacelniku ze si se me zastal... já s GG databazi pracuju v SQLiteStudiu a vymejslim si akorat ptakoviny, abych zamestnal borce vyvojare a oni nemeli cas na bezny vyvoj GG
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#65
Publikováno 26 září 2015 - 10:04
HaLuMa: jo takhle, už jsem se chytnul je pravda, že v jiném programu mi ten SQL příkaz nefachá
#66
Publikováno 08 říjen 2015 - 14:34
Aby to nezapadlo: http://www.geocachin...chingový-deník/
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#67
Publikováno 20 říjen 2016 - 12:17
Protože zahálka je nepřítelem duše a už dlouho koukám na ten jediný příklad na http://geoget.ararat...p/user:databaze, který není řešen čistě v SQL, tak níže uvádím dotaz, který vrací tyto hodnoty jen s použitím SQL (ukázku s použitím pascalu doporučuji ale z pedagogických důvodů v dokumentaci ponechat):
SELECT id, ifnull(group_concat(cnt || 'x ' || type), '0x Not-"Found It" logs') Not_FI_logs FROM ( SELECT g.id, l.type, count(1) cnt FROM ( SELECT * FROM geocache WHERE cachestatus <> 2 ) g LEFT JOIN geolog l ON g.id = l.id AND l.type NOT IN ('Found it', 'Webcam Photo Taken', 'Attended') AND dt >= ( SELECT max(dt) FROM geolog ls WHERE l.id = ls.id AND ls.type IN ('Found it', 'Webcam Photo Taken', 'Attended') ) GROUP BY g.id, l.type ORDER BY g.id, l.type ) GROUP BY id;
Tento příspěvek byl upraven od tarmara: 20 říjen 2016 - 12:18
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#68
Publikováno 20 říjen 2016 - 20:07
Dal jsem to tam. Priste to tam klidne muzes doplnit i ty.
MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- Combine - automatizace opakovanych cinnosti (diskuse, dávky)
- Stator - statistiky y GeoGetu (diskuse)
- Spoiler - uložení spoilerů do GPS jako POI (diskuse)
- Náhrada GJ legálními postupy
#69
Publikováno 28 březen 2017 - 10:57
SQL dotaz pro vyhledání keší s více ověřeními
select id from geolist where ( case when unzlib(longdesc) LIKE '%geochecker.com/index.php%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%geo_inputchkcoord%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%evince.locusprime.net/cgi-bin%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%index.php?co=checker%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%geo.komurka.cz/check.php%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%/gcchecker.php%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%/GCchecker/Check%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%certitudes.org/certitude%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%geochecker.gps-cache.de/check.aspx?id=%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%gccheck.com/GC%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%gc-apps.com/geochecker/show%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%geocache.fi/checker%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%geowii.miga.lv/wii%' then 1 else 0 end + case when unzlib(longdesc) LIKE '%gc.gcm.cz/validator/%' then 1 else 0 end ) >= 2
#70
Publikováno 28 březen 2017 - 11:07
To neni moc pekne - pro kazdou kesku 14x nacitat a rozzipovavat listing ... Neco asi optimalizator vylepsi, ale je otazka kolik.
MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- Combine - automatizace opakovanych cinnosti (diskuse, dávky)
- Stator - statistiky y GeoGetu (diskuse)
- Spoiler - uložení spoilerů do GPS jako POI (diskuse)
- Náhrada GJ legálními postupy
#71
Publikováno 28 březen 2017 - 11:53
To neni moc pekne - pro kazdou kesku 14x nacitat a rozzipovavat listing ... Neco asi optimalizator vylepsi, ale je otazka kolik.
V tom bych zas az tak problem nevidel, precijen se tehle dotaz nebude poustet dvakrat do minuty a netrpelivci si z vysledku udelaji seznam. Spis bych to jeste upravil o UPPER funkci a ty LIKE vyrazy hodil do velkych pismen....
EDIT protože bez upraveného kódu je příspěvek jen plkáním:
/*případně zaměnit ZDECOMPRESS za UNZLIB funkci*/ SELECT ID FROM GEOLIST WHERE ( CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEOCHECKER.COM/INDEX.PHP%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEO_INPUTCHKCOORD%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%EVINCE.LOCUSPRIME.NET/CGI-BIN%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%INDEX.PHP?CO=CHECKER%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEO.KOMURKA.CZ/CHECK.PHP%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%/GCCHECKER.PHP%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%/GCCHECKER/CHECK%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%CERTITUDES.ORG/CERTITUDE%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEOCHECKER.GPS-CACHE.DE/CHECK.ASPX?ID=%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GCCHECK.COM/GC%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GC-APPS.COM/GEOCHECKER/SHOW%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEOCACHE.FI/CHECKER%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GEOWII.MIGA.LV/WII%' THEN 1 ELSE 0 END + CASE WHEN UPPER(ZDECOMPRESS(LONGDESC)) LIKE '%GC.GCM.CZ/VALIDATOR/%' THEN 1 ELSE 0 END ) >= 2;
Tento příspěvek byl upraven od tarmara: 28 březen 2017 - 12:14
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#72
Publikováno 28 březen 2017 - 12:11
no mě se to taky úplně nelíbí, a vím, že se to pořád unzlibuje, ale:
- dotaz mi trvá asi minutu, tak to neřeším - pouštím to ručně a dost sporadicky
- zrovna gord a tamara jsou asi největší SQL guru co znám já končím u "select * from table where id=3" (case jsem použil poprvé v životě a tu sčítací obezličku mi poradil kolega v práci)
#73
Publikováno 28 březen 2017 - 12:45
Ja a guru na SQL, tos me pobavil (i kdyz ... ten dovetek "co znam", ten to mozna vysvetluje )
A ta obezlicka se scitanim se mi libi.
MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- Combine - automatizace opakovanych cinnosti (diskuse, dávky)
- Stator - statistiky y GeoGetu (diskuse)
- Spoiler - uložení spoilerů do GPS jako POI (diskuse)
- Náhrada GJ legálními postupy
#74
Publikováno 28 březen 2017 - 14:36
Pánové, a co nějak takhle:
SELECT ID FROM (SELECT ID, UPPER(ZDECOMPRESS(LONGDESC)) AS D FROM GEOLIST) L WHERE ( CASE WHEN L.D LIKE '%GEOCHECKER.COM/INDEX.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEO_INPUTCHKCOORD%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%EVINCE.LOCUSPRIME.NET/CGI-BIN%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%INDEX.PHP?CO=CHECKER%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEO.KOMURKA.CZ/CHECK.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%/GCCHECKER.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%/GCCHECKER/CHECK%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%CERTITUDES.ORG/CERTITUDE%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOCHECKER.GPS-CACHE.DE/CHECK.ASPX?ID=%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GCCHECK.COM/GC%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GC-APPS.COM/GEOCHECKER/SHOW%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOCACHE.FI/CHECKER%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOWII.MIGA.LV/WII%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GC.GCM.CZ/VALIDATOR/%' THEN 1 ELSE 0 END ) >= 2;
Je to obecná syntaxe SQL, nevím, jestli to MySQL SQLite podporuje, v GeoGetu jsem to nijak nezkoušel, spíš to berte jako námět na směr řešení. V tomto případě by se každá položka popisu dekomprimovala jenom jednou. Ale zase netuším, kolik si vezme režie vnořených dotazů.
Tento příspěvek byl upraven od mh.mail: 28 březen 2017 - 14:55
#75
Publikováno 28 březen 2017 - 14:38
Je uplne jedno, co MySQL podporuje, Geoget pouziva SQLite.
Vzdycky mne fascinuje, proc si to tolik lidi plete. (ne jen tady, a ted)
#76
Publikováno 28 březen 2017 - 14:52
Pánové, a co nějak takhle:
SELECT ID FROM (SELECT ID, UPPER(ZDECOMPRESS(LONGDESC)) AS D FROM GEOLIST) L WHERE ( CASE WHEN L.D LIKE '%GEOCHECKER.COM/INDEX.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEO_INPUTCHKCOORD%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%EVINCE.LOCUSPRIME.NET/CGI-BIN%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%INDEX.PHP?CO=CHECKER%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEO.KOMURKA.CZ/CHECK.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%/GCCHECKER.PHP%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%/GCCHECKER/CHECK%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%CERTITUDES.ORG/CERTITUDE%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOCHECKER.GPS-CACHE.DE/CHECK.ASPX?ID=%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GCCHECK.COM/GC%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GC-APPS.COM/GEOCHECKER/SHOW%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOCACHE.FI/CHECKER%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GEOWII.MIGA.LV/WII%' THEN 1 ELSE 0 END + CASE WHEN L.D LIKE '%GC.GCM.CZ/VALIDATOR/%' THEN 1 ELSE 0 END ) >= 2;Je to obecná syntaxe SQL, nevím, jestli to MySQL podporuje, v GeoGetu jsem to nijak nezkoušel, spíš to berte jako námět na směr řešení. V tomto případě by se každá položka popisu dekomprimovala jenom jednou. Ale zase netuším, kolik si vezme režie vnořených dotazů.
Pánové, tady už se dostáváme na úroveň optimizeru a exekučních plánů a tyhle věci jsou značně závislé na DB platfomě. Třeba na Oraclu bych si dovolil tvrdit, že to poběží stejně dlouho jako původní mikromův návrh. SQLite zase tak podrobně na téhle lowlevel úrovni neznám. Každopádně mi tyhle dotazy na databázi s 80k keší běží do deseti vteřin. Pojďme se vrátit k původnímu tématu a akademické plkání bez většího pedagogického významu můžeme přesunout do patřičného vlákna. Budu si to tu muset pročíst podrobněji, zachytil jsem jen začátek vlákna, ale dost mě interesuje. Řešil jsem to na úrovni SQL (vč. generování stringu, který na jedno CTRL+C-CTRL+V vložím do geochecku, ale tohle vypadá víc sofistikovaně...
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#77
Publikováno 28 březen 2017 - 16:53
bez UPPER 00:59, s UPPER 01:10
#78
Publikováno 28 březen 2017 - 21:11
bez UPPER 00:59, s UPPER 01:10
To je očekávané, protože upper má se zvětšením všch zvětšitelných znaků v listingu dost práce. Upper tam není z důvodu výkonnosti, ale kvuli tomu, že LIKE operátor je citlivý na velikost písmen. Takže '%GEOCHECKER.COM/INDEX.PHP%' není to samé jako '%geochecker.com/index.php%' nebo '%Geochecker.cOm/index.PHP%'. URL (alespoň na úrovni domény) velikost písmen nerozlišuje. Ale pokud se zdroják listingu a hledaný výraz převedou na velká písmena, tak už budou výsledky úplné. A ne, nezkoušel jsem zjišťovat, jestli má někdo v listingu opravdu takhle upravenou URL na ověřovač.
Neplatí, viz příspěvek níže
Tento příspěvek byl upraven od tarmara: 28 březen 2017 - 21:29
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#79
Publikováno 28 březen 2017 - 21:27
Tak i SQL guru se někdy splete. V Oraclu bývá LIKE operátor obvykle case sensitive. V SQLite nikoli, by default je case insensitive.
dá se to odzkoušet následujícím kódem:
select 'a' LIKE 'A'; --vrátí 1, tedy TRUE PRAGMA case_sensitive_like=ON; --přepne na case sensitive LIKE select 'a' LIKE 'A'; --vrátí 0, tedy FALSE
Platí toalejen pro ASCII znaky, pro písmena s nabodeníčky nikoli.
Bez zdroje ani ránu: https://www.sqlite.o..._expr.html#like
Blog o SQL v GeoGetu || Dakota10 || Android: Locus, mapy PAWS || Windows: Geoget
#80
Publikováno 28 březen 2017 - 21:59
aha, díky za vysvětlení, já myslel, že je to právě kvůli rychlosti, že třeba něco jako polovina hledaných písmen (pokud by se a!=A).
No každopádně to už je hodně OT, šlo mi spíše jen o nalezení keší u kterých by se dala ověřit ta nová funkčnost což se povedlo, a znovu to hledat asi jen tak nebudu
ale zase jsem se naučil něco nového.
a aby to nebylo úplně OT, tak kdo by vyžadoval funkčnost gccheck.com, tak ten problém s nenaštením stránky je v SSL certifikátu (vs IE) a řešením je změna v nastavení Internet Exploreru (Možnosti internetu -> Upřesnit -> [zrušit zaškrtnutí] Kontrolovat odvolání certifikátu serveru)
V další verzi pluginu to bude nastavitelné v INI, že se to pokud bude potřeba změní v registrech a po zavření okna se to zase vrátí zpátky (podobně jako iefix).
2 uživatel(ů) prochází toto téma
0 uživatelů, 2 návštěvníků 0 anonymních uživatelů