Přejít na obsah


Fotka

Geoget SQL


  • Pokud chcete vložit odpověď, přihlašte se
80 odpovědí na toto téma

#61 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

Publikováno 25 září 2015 - 12:58

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?? 


  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#62 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

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í :)


  • 0

#63 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 334 příspěvků(y)

Publikováno 25 září 2015 - 18:26

to ale funguje ve skriptech, ktere maji pristup ke geogetim UDFkum... ne v cizim programu.


  • 1

#64 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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


  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#65 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

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á :)


  • 0

#66 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

Publikováno 08 říjen 2015 - 14:34

Aby to nezapadlo: http://www.geocachin...chingový-deník/


  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#67 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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

  • 2

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#68 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 8 671 příspěvků(y)

Publikováno 20 říjen 2016 - 20:07

Dal jsem to tam. Priste to tam klidne muzes doplnit i ty.


  • 0

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 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

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

  • 0

#70 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 8 671 příspěvků(y)

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.


  • 1

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 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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

  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#72 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

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 :D 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)


  • 0

#73 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 8 671 příspěvků(y)

Publikováno 28 březen 2017 - 12:45

Ja a guru na SQL, tos me pobavil  :D  (i kdyz ... ten dovetek "co znam", ten to mozna vysvetluje  :D )

 

A ta obezlicka se scitanim se mi libi.


  • 0

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 mh.mail

mh.mail

    Advanced Member

  • Members
  • PipPipPip
  • 1 700 příspěvků(y)

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

  • 1
„Normální je nepodvádět.“
http://gc.i-mh.net/ | gc@i-mh.net

#75 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 334 příspěvků(y)

Publikováno 28 březen 2017 - 14:38

Je uplne jedno, co MySQL podporuje, Geoget pouziva SQLite.  :P 

Vzdycky mne fascinuje, proc si to tolik lidi plete. (ne jen tady, a ted)


  • 1

#76 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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ě...


  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#77 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

Publikováno 28 březen 2017 - 16:53

bez UPPER 00:59, s UPPER 01:10


  • 1

#78 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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

  • 0

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#79 tarmara

tarmara

    Air-cooled

  • Members
  • PipPipPip
  • 840 příspěvků(y)

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


  • 1

Blog o SQL v GeoGetu || Dakota10 || Android: primárně aDrake, sekundárně Locus, mapy PAWS || Windows: Geoget    

tarmara.png

N o t   a l l   t h o s e   w h o   w a n d e r   a r e   l o s t


#80 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 895 příspěvků(y)

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 :D 

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).


  • 0




0 uživatel(ů) prochází toto téma

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

Reklama