GSAK - Where

Med GSAK version 7.7.3 build 30 blev fanebladet 'where' føjet til filterfunktionen.

Grundlæggende forklaring
GSAK Where er bygget op efter et matematisk princip. De vigtigste værktøjer er: AND OR NOT

cachetype = ”T” eller cachetype = ”T” AND status = ”A”

Man kan ved hjælp af ( og ) lave samlede udtryk. Skal en cache fx være enten en traditionel eller en mystery med corrected coordinates og vil man kun have disablet caches med: (cachetype = ”T” OR (cachetype = ”U” AND hascorrected)) AND status = ”T”

sikre her at cachetype = ”T” cachetype = ”U” AND hascorrected opfattes som et samlet udtryk i forhold til status, alternativt ville man få alle traditionelle + alle mystery med corrected coordinates med status disablet.

NOT: Hvis man vil udelukke et udtryk kan man bruge funktionen NOT NOT(cachetype = ”T”)

Dette vil give alle caches som ikke er traditionelle.

SQLITE
I where kan der skrive sqlite-kommandoer til at filtrere cacher med. Fordelen er, at man på den måde kan gemme komplekse filtre, der tidligere skulle skrives i en makro med MFILTER-kommandoen.

Man kan med Where søge i alle disse felter: Listen findes i GSAK - Macro - Help - Database Variables (jeg har fjernet $d_ foram dem alle, så de står som de skal bruges i Where søgninger.
 * Archived - Boolean - Deprecated - use Status instead
 * Bearing - String - Bearing (NW, SW, etc) from current centre point
 * CacheID - String - Unique cache ID
 * CacheType - String - A 1 character string representing the cache type (See below)
 * Code - String - Unique Waypoint code
 * Changed - Date - Date data was actually changed in this waypoint
 * Container - String - Container size
 * County - String - County
 * Country - String - Country
 * Created - Date - Date the waypoint was created in the database
 * Degrees - Numeric - Bearing in degrees from your current centre point
 * Difficulty - Numeric - Difficulty rating
 * Distance - Numeric - Distance from current centre point
 * DNF - Boolean - Cache currently has the DNF flag
 * DNFDate - Date - Date of most recent DNF
 * Elevation - Numeric - Elevation (always in meters)
 * Found - Boolean - Found Status
 * FoundCount - Number - Found Count (number of times you have found this cache)
 * FoundByMeDate - Date - Date of your most recent find for a cache
 * FTF - Boolean - First to find
 * HasCorrected - Boolean - Waypoint has corrected coordinates
 * HasTravelBug - Boolean - Cache has a travel bug
 * HasUserNote - Boolean - Waypoint has a user note
 * Hints - String - Hints for this cache (decoded)
 * LastFoundDate - Date - Date the cache was last found (by anybody)
 * LastGPXDate - Date - Date this waypoint was last updated by loading a GPX file
 * LastLog - Date - Date of the last log for this cache (any log)
 * LastUserDate - Date - Date this waypoint was last updated manually by any user action
 * LatOriginal - String - Original Latitude (before change by corrected coordinates)
 * Latitude - String - Latitude in decimal degrees format
 * Lock - Boolean - Waypoint is locked see columns
 * LongDescription - String - Cache Long description
 * LongHTM - Boolean - Long description contains HTML code
 * LonOriginal - String - Original Longitude (before change by corrected coordinates)
 * Longitude - String - Longitude in decimal degrees format
 * MacroFlag - Boolean - Macro only "UserFlag" see MacroFlag command
 * MacroSort - String - Internal "macro sort" more information
 * Name - String - Waypoint name
 * NumberOfLogs - Numeric - Number of logs linked to this cache
 * OwnerId - String - ID (usually a number) of the owner of this cache (not all source data contains this)
 * OwnerName - String - Owner name (more information)
 * PlacedBy - String - Name of cache placer/hider
 * PlacedDate - Date - Date the cache was placed/hidden
 * Resolution - String Elevation resolution
 * ShortDescription - String - Cache Short description
 * ShortHTM - Boolean - Short description contains HTML code
 * SmartName - String - Waypoint smart name
 * SmartOverride - Boolean - Smart name override flag
 * Source - String - Source of data from GPX/LOC see columns
 * State - String - State/Province name the cache is in
 * Status - String - Cache Staus (see below)
 * Symbol - String - Symbol name for this waypoint
 * TempDisabled - Boolean - Deprecated - use Status instead
 * Terrain - Numeric - Terrain rating
 * TravelBugs - String - Details of any travel bugs in this cache. See also HasTravelBug
 * Url - String - Waypoint URL
 * UserData - String - User data
 * User2 - String - User data 2
 * User3 - String - User data 3
 * User4 - String - User data 4
 * UserFlag - Boolean - User flag
 * UserNote - String - User Note. See also HasUserNote
 * UserNoteDate - Date - Date the last time the user note was updated
 * UserSort - Numeric - User sort
 * Watch - Boolean - Cache is being watched

Når man skal bruge Where søgning, er det vigtigt at gøre sig klart, hvad det er for typer af felter, man vil arbejde med (står lige efter feltnavnene ovenfor):
 * Boolean - Logisk Ja/Nej Sand/Falsk
 * Date - Dato
 * Number - Heltal
 * Numeric - Kommatal
 * String - Tekst

Søgning i tekstfelter
Man kan skrive: Feltnavn = "søgeord", men det vil kun passe hvis feltet indeholder søgeord og intet andet, og det skal være skrevet helt præcist rigtigt med store og små bogstaver. Det kan man komme lidt unden om, ved at gøre sådan: Feltnavn like "%søgeord%", som betyder at der kan stå en tekst foran og bagved søgeordet (de to %-tegn).

Hvis man vil søge efter en sætning: Feltnavn like "%sætning der søges efter%", har man igen det problem at "sætning der søges efter" skal stå præcist sådan, som det er skrevet. Derfor er det smartere, men noget mere besværligt, at dele sætningen op: Feltnavn like "%sætning%" AND Feltnavn like "%søges%" AND Feltnavn like "%efter%"

For at søge i cachebeskrivelsen er der to felter der er interessante: ShortDescription og LongDescription som begge er tekster, og uanset hvor ordene findes, skal cachen findes: ((ShortDescription like "%sætning%" AND ShortDescription like "%søges%" AND ShortDescription like "%efter%") OR (LongDescription like "%sætning%" AND LongDescription like "%søges%" AND LongDescription like "%efter%")) Bemærk de to sæt af parenteser inden i hinanden: ( ( søgning på ShortDescription ) OR ( søgning på LongDescription ) )

D/T kombinationer
Where fanen er praktisk fx. hvis man vil lave et filter over de D/T kombinationer man mangler:

((Difficulty="1" AND Terrain="3.5") or (Difficulty="1" AND Terrain="4") or (Difficulty="1" AND Terrain="4.5") or (Difficulty="1.5" AND Terrain="4.5") or (Difficulty="1.5" AND Terrain="5") or (Difficulty="2" AND Terrain="4.5") or (Difficulty="2.5" AND Terrain="4") or (Difficulty="2.5" AND Terrain="5") or (Difficulty="4.5" AND Terrain="5")) AND Not(isowner)

Når jeg så finder en cachen med en kombination jeg mangler tager jeg blot linien ud.

De gode cacher

 * For at finde cacher med Favoritpoints kan man indtaste dette i Where: (FavPoints>"10") hvor 10 er minimumsantallet af favoritpoints man ønsker at se. Man får derved de cacher, der har over 10 favoritpoints.
 * For at finde cacher med enten et vist antal GcVote stjerner ELLER et vist antal favoritpoints skal dette indtastes i Where: (User2>"3,0") or (FavPoints>"10"). Hér anvendes makroen GCVoteGrabber og GCvote vurderinger er i dette eksempel lagt ind i User2. Tallet 3,0 angiver, at cacher med vurderinger over 3 kommer med i filteret. I eksemplet er anvendt ELLER (or) således, at man får såvel de gode GcVote cacher OG de cacher med mange favoritpoints med.

Andet
På diverse fora er kommandoen beskrevet i følgende tråde:

Dansk geocaching forum

Gsak.net forum

Og en lille tutorial til sqlite: http://zetcode.com/databases/sqlitetutorial/select/