Ein SQL Statement, dass man sich gut notieren solle - Entscheidungen zwischen 2 SELECTs - MySQL / PHP
CASE WHEN THEN END
Manchmal ist es ganz hilfreich, wenn man nach einer Datenbankabfrage keine weiteren Auswertungen der zurückgegebenen Datentypen in PHP durchführen möchte.
Beispiel
Du willst prüfen ob ein Wert in einer Tabelle existiert und lässt Dir true oder 1 zurückwerfen.
Falls aber der Wert vorhanden ist, soll gleich die ID des Datensatz mit ausgegeben werden.
Problem
Wenn Du nun nach der ID prüfst, um alles abzufangen würde ja NULL oder besser ein leeres Array zurückgeworfen.
Es ist also notwenig 2 verschiedene Arrayzustände in PHP auszuwerten.
Ich selber möchte z.b. sowas hier in mein return übergeben:
Das e bedeutet abgekürzt nur existent. Wenn ich aber auf keine ID treffe, weil diese z.b. nicht vorhanden ist oder irgend ein anderer Wert, z.B. weil der Eintrag vorher in der Datenbank geprüft wird, dann wäre mein return an der Stelle ungültig, da *e bzw [0]['e'] in der Rückgabe garnicht definiert ist.
Da ich extrem faul bin und alles gern universell bauen möchte, stört mich das Auswerten der Rückgabe auf den Typenzustand. Zudem mag ich meinen Quellcode sehr übersichtlich halten und nicht mit hässlichen Umwandlungen aufzublähen. Es muss also anders gehen.
Die Lösung wäre also, dafür zu sorgen, dass auch bei Fehlschlägen etwas sinnvolles zurückkommt, da auch eine leeres Ergebnis ein gewünschter Abfragezustand sein kann.
Jetzt haben wir also eine Möglichkeit auf Existens zu prüfen, ohne unseren Array-Typen in PHP zu verletzen.
Leider nun aber ohne Ausgabe der ID .. hmm? ...
Also setzen wir mal an dieser Stelle eine Entscheidungsbedingung ein. Dieses Konstrukt ist etwas ungewöhnlich aber sehr effizient.
Lösung
Das CASE prüft nun den Zustand der Abfrage und vergleicht diesen mit WHEN auf 1 ( true )
Für diesen Erfolgsfall wird dann die ID in e zurückgegeben. Sollte kein Wert gefunden worden sein, so fällt für e = 0 raus.
In beiden Fällen bekommt unsere Abfrage immer eine gültige Rückgabe aus der Datenbank, welche leichter mit PHP verarbeitet werden kann.
#php #php7 #php5 #array #html #dhtml #web #webdevelopment #coding #dev #development #programming #coding #html #html5 #webdesign #codedesign #codereview #cleancode #steemit #steem #stem #de-stem #steemstem #busy
#utopian-io #creative #technology #tutorial #science #sql #mysql #algorithm #algorithmus #algo #algos
Was ist so verkehrt daran, die Antwort des SQL-Servers auf NULL bzw. die Länge des zurückgegebenen Arrays zu prüfen? An einer Stelle muss ja so oder so geprüft werden, oder?
Es geht darum, dass die Übergabe des Array in der Annahme passiert, in den man auf einen Index zugreift, der , wie beschrieben , in manchen Fällen nicht existiert. Was wiederum zu unnötigen Kontrollabfragen führt.
Grundlegend sollte das SQL-Statement alles so aufbereiten wie es in der Anwendung gebraucht wird, ohne zusätzliche Anpassungen zu implementieren.