Grejen med SQL

Det finns alltid en rätt tid för en fräsig SQL och en fel tid och fel tid är oftast när klockan är efter 21. Idag är det 23:25 men ändå en bra SQL-tid i saltgruvan.

För den (stackare) som ännu inte är invigd i SQL-träsket kan jag berätta att att SQL är ett språk (Structured Query Language) alltså ett strukturerat fråge-språk och det är precis vad det låter som: ett språk med vilket man hämtar data genom att ställa frågor!

För den oinvigde är ”data” helt enkelt information, ex: personinformation över alla personer som finns i Sverige, information om alla bilarna du äger, din porrfilmssamling eller innehållet i ditt kylskåp. Data är typ information i någon from av struktur.

En dator är alltså en pryl som behandlar data och du kan inte kalla din dator för ”data” med hedern i behåll. Det är liksom som att blanda ihop ord och bokstäver (typ) men det gör man ju inte. G är en bokstav GET är ett ord bestående av bokstäver, ja ni fattar. När det kommer till tal och siffror är det precis samma sak fast här verkar totalt kaos råda. DAGLIGEN läser man om dödssiffror som stiger och annat felaktigt. Det är ju faktiskt dödstalet som stiger. Tal består ju av siffror… Om man som jag gillar att reta upp sig på saker är detta närmast en outtömbar källa för irritation och bultande ådror i pannan  – DAGLIGEN. Se detta inlägg för mer information.

Hur som, i all denna är information är SQL din vän att hålla i handen när du behöver leta i detta träsk av information och jag har inte alls tänkt att närmare förklara vad och hur man pratar SQL men det är lite av ett vägskäl inom programmering, många ger upp när de kommer till SQL. En dålig SQL-fråga kan sega ner ett system enormt samtidigt som en bra kan öka prestandan som satan. Bäst är när man på en kvart optimerar en fråga och går från flera sekunder till några millisekunder. Många är de stollar som försökt ersätta SQL med något annat ”enklare” – nästan alltid mycket sämre.

I alla fall, en grej som ofta är lite knölig i SQL är att bygga en snabb sökmotor och om du står inför detta så fortsätt läsa…. (konstpaus).

Anta att du har ett antal produkter i ditt system och dessa produkter har ett eller flera sökord kopplade till sig och du vill alltså söka fram den produkt som matchar bäst, dvs där flest sökord matchar din sökfras.

Programmering handlar mycket om att kunna uttrycka saker på så få ord som möjligt och så exakt som möjligt med de ord som finns i ett språk och egentligen är det samma sak att uttrycka på ett vanligt språk som att ”programmera” det man vill säga. Enda kruxet är att programmeringsspråk har ofta väldigt begränsat med ord man kan använda sig av.

På svenska skulle jag säga:
Jag vill ha en lista på alla produkter vars sökord innehåller sökfrasen och listan ska sorteras så att den produkt som har flest träffar bland sökorden på sökfrasen ska vara överst och resten i fallande ordning.

Men det kommer man inte långt på, det är alldeles för luddigt och svaret skulle bara bli error stupid! SQL har inte dessa ord så då får man uttrycka sig med andra ord. SQL har däremot orden ”längd” och ”ersätt” som man kan använda för att få reda på längden (antal bokstäver) på ett ord eller mening och ersätt för att ersätta ett ord med ett annat.

Så på svenska skulle jag då säga:
Jag vill ha en lista på alla produkter vars sökord innehåller sökfrasen och listan ska sorteras fallande utifrån kvoten av differensen av antalet bokstäver i produktens sökord och antalet bokstäver i produktens sökord efter att alla förekomster av sökfrasen tagits bort, och längden på sökfrasen.

Visst fuktar det? VISST FUKTAR DET?

Differens och kvot kommer du ihåg från matten i åk6 va? Det är alltså ”delat med” och ”minus” vi pratar om.

På SQL skulle det skrivas såhär:
select Product.*, (length(Product_keywords) – length(replace(Product_keywords, ‘SÖKFRAS’,”))) / length(‘SÖKFRAS’) as score from Product where Product_keywords like ‘%SÖKFRAS%’ order by score desc

BOOM! Sen tar man liksom bara en kaffe och sträcker ut sig.

Ska inte hävda att jag själv klurade ut  detta utan jag snubblade sannolikt över det på nätet när jag googlade efter en bra lösning på nämnda problem för länge sen men det är en härlig SQL jag med stor iver med jämna mellanrum skriver.

Frågor (höhö) på det?

Publicerad: november 25, 2015 - Fredde, Mjukvara |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

3 Kommentarer |

#143 – #145 10x 30s/30s@400>500w

Tre pass med 10 sekunders sprintar.

Puls (snitt/max):
175 / 188
172 / 186
173 / 184

Finns väl ingen jättespännande graf men här kommer lite data från sista passet

watt puls

Publicerad: november 8, 2015 - Testcykeln Monkan och jag |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Skriv en kommentar |

#138 – #142 20min@279w

watt

Nötte vidare efter rehabben efter sjukveckan och blev som vanligt 20min på 93% av FTPn. Borde nog egentligen kört på något lägre effekt pulsen är verkligen i det högre intervallet.

Publicerad: november 8, 2015 - Testcykeln Monkan och jag |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Skriv en kommentar |

#146 Kompiskampen #1

Under vintern tänkte jag vara med och köra kompiskampen som mycket påpassligt går ut på att man ser vem som ökat mest i watt/kilo under vintern.

Egentligen skulle mitt bantningsprojekt gått av stapeln den 1:a november men nu sköt jag på det till måndag så jag skulle ha gott om kolhydrater i systemet för dagens prövning.

Upplägget är att man kör 20min all-in och tar snitteffekten. Jag brukar ju köra all-in på 30min så det var lite snurrigt att inte ha någon rutin på passet men jag tycker ändå jag lyckades disponera kraften ganska bra. Siktade på 86rpm@3.5kilo (301watt) men insåg att det inte skulle hålla så jag prutade till 84rpm (294w). Möjligen att jag hade klarat 85rpm men nu blev det inte så, så skit samma. Upplevde 20min all-in som betydligt snällare än 30min all-in.

Garminwatt vs Monarkwatt
Under hösten har jag kört med Garmin Vector 2 pedaler på Monkan och de diffar ungefär 8% mot Monkan så jag är ganska rådvill över vilka siffror jag ska följa. Hyfsat meningslöst att ha garmin-pedalerna om jag inte kör efter den effekten. Samtidigt som all gammal träningsdata blir oduglig om effekten helt plötsligt skuttar upp 8% så tills vidare kör jag på båda.

Dagens 20min all-in landade alltså på 294monarkwatt respektive 323garminwatt (hela 9% diff).

Vikten låg på 82.5 det är ungefär där den legat hela sommaren +/- 1 kilo. I augusti bytte jag våg och den gamla visade 2kg mindre så enligt den låg jag på 80 cirka, helt enligt planen alltså.

323 / 82.5 = 3.9
294 / 82.5 = 3.6

FTP: 280 monarkwatt / 308 garminwatt.

Målsättning
Målet är som varje vinter FTP=300watt på Monkan vilket jag brukar komma upp i, men i år lägger jag även till vikten som jag vill ha ned på 75 på gamla vågen och då blir det väl 77 på nya vågen, kanske 75 får se hur mycket som hinns med, men 77 i alla fall.

Så upplägget blir i två delar, först gå ned i vikt till årsskiftet med kost utan kolhydrater och vo2max-träning blandat med yoga och utepass om livspusslet och vädret tillåter. Sen efter årsskiftet så blir det vanlig tröskelträning för att jaga watt.

Noterar att detta var årets 146:e pass på årets 312:e dag så jag ligger tio pass efter planen att köra varannan dag. Kan bli svårt att hinna i kapp men å andra sidan vo2maxen ena dagen, lugnt pass andra dagen och vila tredje dagen skulle kunna vara ett bra upplägg att rotera.

Frågor på det?