SQL Grundlagen – Teil 3

Nachdem ich nun schon einen ersten Teil sowie auch schon einen zweiten Teil geschrieben habe, wird es mal Zeit einen weiteren Teil zu schreiben.
Nämlich ein paar Eigenheiten, die man aber immer wieder brauchen kann.

NULL Felder:
Beispielsweise die Prüfung von Checkbox (Boolean) Feldern isnull(a.wichtigerhaken,0)=0. Diese können unter Umständen gar nicht gefüllt sein, angehakt sein oder wieder abgehakt worden sein. Deshalb ist es sinnvoll den Zustand "nicht gefüllt" mit dem Zustand "nicht angehakt" gleichzusetzen. Das geschieht ganz einfach mit der Funktion isnull(). Im ersten Parameter wird das zu prüfende Feld eingetragen und im zweiten Parameter der Wert eingetragen, wenn es tatsächlich NULL also leer ist. isnull(a.wichtigerhaken,0) prüft also das Feld a.wichtigerhaken und setzt eine 0, wenn der Wert wirklich NULL ist. Und mit =0 wird geprüft ob das Feld dann 0 ist.
Würde man diese Prüfung mit isnull nicht machen, würde der Wert ein NULL zurückgeben und somit niemals auf =0 reagieren. Aber da NULL meistens mit 0 gleichzusetzen ist, muss man die NULL Felder mit 0 Werten deklarieren um die Prüfung korrekt durchführen zu können.

Datum beschränken:
Eine sehr einfache Lösung um die Antwortmenge auf einen bestimmten Zeitraum zu beschränken ist der Tag. Dazu macht man in der WHERE Klausel beispielsweise sowas hier um das Datum vor 3 Tagen und bis 14 Tage in der Zukunft zu haben. Dafür ist DATEADD() eine sehr gute Funktion:
and wa.termin >= DATEADD(DAY,-3,GETDATE())
and wa.TERMIN < DATEADD(DAY,14,GETDATE())

Das GETDATE() gibt einfach das aktuelle Datum zurück. Mit DATEADD(DAY,-3,GETDATE()) wird einer Tag ermittelt, der 3 Tage in ausgehend vom aktuellen Datum berechnet wird. DAY ist der Parameter, der besagt, dass der Tag geändert werden soll. Die -3 gibt an, dass 3 Tage zurückgerechnet werden soll und Getdate() gibt eben das aktuelle Datum vom System zurück. Dies ist also ein sehr einfacher Vergleichswert um zu sehen ob der wa.termin kleiner oder gleich das Datum 3 Tage in der Vergangenheit ist.
DATEADD(DAY,14,GETDATE()) macht das Gleiche analog wie oben. Nur 14 Tage in die Zukunft.

UNION:
Man kann auch mehrere Abfragen zusammenfassen. Dafür ist UNION das Mittel der Wahl. Beispielsweise, wenn man Daten für ein Chart benötigt, die sich auch immer auf den gleichen Zeitraum beziehen.
declare @limitAB int
set @limitAB = 100
SELECT wa.Termin,
'Belegt' as Art,
count(wa.nummer) as anzahl
From Warenausgang wa
Where wa.status = 9
Group by wa.Termin
UNION
SELECT wa.Termin,
'Frei' as Art,
case when count(wa.nummer) > @limitAB then 0 else @limitAB - count(wa.nummer) end as Anzahl
From Warenausgang wa
Where wa.status = 9
Group by wa.Termin
Order By wa.Termin, Art

Das obige Beispiel macht eine Abfrage und sucht erstmal die Anzahl der Warenausgänge pro Tag im angegebenem Zeitraum. Gleichzeitig wird auch eine Grenze von 100 definiert set @limitAB = 100. In der unteren SELECT Abfrage wird diese diese Grenze verwendet und die Anzahl der Warenausgänge abgezogen.

So habe ich am Ende eine Ergebnistabelle, welche mir 2 Werte liefert. Einmal die Anzahl der Warenausgänge als "Belegt" und noch die Restmenge als "Frei".
Würde ich nun in einem Programm ein Diagramm basteln, könnte ich so beide Werte in Abhängigkeit vom Termin verwenden.
UNION ist also ganz hilfreich um verschiedene Abfragen miteinander zu verbinden. Damit es funktioniert müssen die Abfragen aber Gemeinsamkeiten aufweisen. Über freie Felder wie in diesem Beispiel 'Frei' as Art kann man die Werte hinterher wieder unterscheiden.
Möchte man die Abfragen am Ende noch mit Order By sortieren ist es wichtig, diese Sortierung am Ende zu machen.

Und damit zurück ins Hauptstadtstudio zum Wetter!

May Contain Hackers 2022

Das Jahr hat noch nicht lange angefangen, da kann man doch schon wieder für den Sommer planen. Mit etwas Glück macht Corona keinen Strich durch die Rechnung und man kann endlich wieder auf Freiluftveranstaltungen ohne große Einschränkungen gehen. Das MHC2022 hätte schon 2021 stattfinden sollen. Aber aus bekannten Gründen wurde es abgesagt. Aber da die Hacker ja trotzdem gerne Party machen und auch die freie Natur lieben, unternehmen sie wieder einen neuen Versuch. Mit etwas Glück klappt es dieses Jahr.
Genau deshalb fordern sie auch schon auf ein Ticket zu kaufen. Falls es nicht stattfindet gibt es optional auch das Geld wieder zurück mit einer festen Spende von 50 Euro an den Verein. Ich finde das klingt fair und wäre sicherlich auch wieder bereit dorthin zu campen. Einfach endlich wieder normale Menschen in freier Natur und in Holland. Gut, ich versteh nach wie vor kaum holländisch, aber mit Englisch kommt man auch sehr gut zurecht.
Vom Chaos Communication Camp 2019 hatte ich ja neulich noch ein paar Bilder gepostet. Daran kann man sich sicherlich orientieren. Ich hätte echt Bock drauf.

Bundesservice Telekommunikation

Es gibt mal wieder eine kleine Recherche zu einer Behörde, die es laut Aussage vom Bundesinnenministerium gar nicht gibt und keinerlei Budget hat. Was sie macht wäre aber durchaus sehr schön.
Das Logbuch Netzpolitik hat es sehr schön zusammengefasst:

Wie Lilith Wittmann diese Behörde fand hat sie selbst zusammengefasst.
Ist einfach herrlich zu sehen wie der Streisand Effekt um sich greift wenn die Behörde versucht sich selbst zu löschen. ;)

Und Golem schreibt weiterhin dazu.

Wechsel von domainfactory zu webgo24

Seit ca. 2007 bin ich bei domainfactory treuer Kunde gewesen. Für einen fairen Zehner gab es von Anfang an immer recht gute Leistungen fürs Geld. Der Support war immer super. Zumindest war dies am Anfang noch so, als sie recht unabhängig waren. Irgendwann wurden sie übernommen und es gab es schon erste Qualitätsunterschiede. Nun sind sie vor ein paar Jahren dann auch noch von GoDaddy übernommen worden und damit war es wirklich nicht mehr so gut. Es gab zwar selten Ausfälle oder wenn nur kurzfristig. Gut Anfang 2019 als ich bei einem neuen Arbeitgeber angefangen habe, war ausgerechnet bei Domainfactory die Exchange Infrastruktur fast 2 Wochen lang gestört. Aber gut, da steckt man nicht drin. Die Ursache war am Ende echt witzig. Sie hätten die öffentlichen Ordner nicht aktivieren dürfen. :) PHP Versionen wurden auch lang genug supportet und neue Versionen gab es auch früh genug. Ja sogar ein SSH Zugang gab es um sogar mal kleinere "occ" Befehle für Nextcloud ausführen zu können. Aber sowas wie Let's Encrypt gibt es bis heute nicht. Gut, es gab mit der Zeit zumindest 1 kostenfreies SSL Zertifikat. Wer aber wie ich ziemlich viele Webdienste betreibt, möchte eigentlich jede Subdomain mit einem SSL Zertifikat ausstatten. Die echten kosten aber eine Menge Geld. Genau deshalb wurde ja Let's Encrypt eingeführt. Eine Zertifikatsstelle, welche die grundsätzlichen Zertifikate kostenfrei zur Verfügung stellt. Somit hat man zwar keinen grünen Haken in der Adressleiste, aber immerhin eine kostenfreie Verschlüsselung. Damit ist das Internet deutlich sicherer geworden.

Da ich nun auch vor dem Problem stand, dass ich eine weitere Domain für mein Nebengewerbe benötige, stand mal wieder ein Providerwechsel an. Ich hatte schon letztes Jahr mal mit dem Gedanken gespielt zu manitu.de zu wechseln. Aber irgendwie hat mich dieser nicht so richtig überzeugt. Die Mail Anbindung war irgendwie zu langsam bzw. der Wechsel zu schwierig. Im November hab ich es dann bei netcup.de probiert. Hier war die Mailanbindung noch langsamer. So hab ich mal bei Webhosterwissen geschaut und bin auf webgo gestoßen. Für nen fairen 10er im Monat gibt es 100 GB Speicher und sogar 6 Domains inklusive. Außerdem kann man den Apachen deutlich besser konfigurieren. Beispielsweise die PHP Memory Grenze von 256 MB auf 512 MB erhöhen oder HSTS Strict einstellen. Und es gibt Let's Encrypt. Die Konfiguration der Zertifikate war mitunter nervig, weil es oftmals Fehlermeldungen gab. Aber mit etwas Probieren hat es dann doch wieder gut geklappt.

Heute hab ich dann den halben Tag genutzt um meine Domain tobis-bu.de umzuziehen. Da hängt immerhin eine Mailadresse dran und auch noch meine Nextcloud und dieser Blog. Am Ende war es aber tatsächlich eher nur eine Zeitfrage. Einfach per FTP alle Daten auf den lokalen Rechner herunterladen. Nebenbei die Domain bei webgo schon voreinrichten (ohne AUTH Code) und die Subdomains einrichten. Noch ein E-Mail Postfach einrichten und in Thunderbird einrichten. Nun Ordner für Ordner manuell aus dem alten Postfach ins neue Postfach verschieben und schon ist es fertig.
Danach noch die Datenbanken ziehen und neu einrichten. Nachdem die Daten wieder per FTP an die richtigen Orte geschoben sind, müssen nur noch die Config Dateien mit den neuen Datenbank Zugangsdaten eingerichtet werden.
Wenn dann alles vorbereitet ist (Subdomains, Daten, Datenbanken und die E-Mails) kam der große Schritt. Die Domain endgültig von domainfactory zu webgo mithilfe des Auth Codes umziehen. Und das ging dann tatsächlich auch recht schnell.
Danach hab ich noch die SSL Zertifikate mit Let's Encrypt erstellt und konnte dann relativ schnell und überraschenderweise problemlos wieder auf meine Nextcloud bzw. meinen Blog zugreifen. Das war wirklich genial.

Der Support ist soweit auch fit. Ich bin gespannt, wie es weiterläuft. Aber wenn es so bleibt, bin ich da sicher gerne langjähriger Kunde.