Funkcje sterowania przepływem

Funkcje te znajdują swoje zastosowanie szczególnie w pojedynczych zapytaniach, gdzie nie możemy utworzyć procedur. Na tą grupę składają się cztery konstrukcje – IF(), IFNULL(), NULLIF() oraz CASE.

Konstrukcja IF przyjmuje trzy parametry wejściowe. Przykład jej wykorzystania to:

SELECT IF(id < 0, 0, id) AS id, name FROM tabela

Działanie tego zapytania przedstawia się następująco – jeśli id będzie ujemne zamiast niego zostanie zwrócone 0, natomiast jeśli id będzie większe lub równe 0 to zostanie zwrócone ono samo. I tak dla tabeli postaci:

id name
2 AAAAAAAA
-2 BBBBBBBB
-3 CCCCCCCC
4 DDDDDDDD
6 EEEEEEEE

Otrzymamy tabelę postaci:

id name
2 AAAAAAAA
0 BBBBBBBB
0 CCCCCCCC
4 DDDDDDDD
6 EEEEEEEE

Konstrukcja IFNULL() przyjmuje dwa argumenty wejściowe. Przykład wykorzystania:

SELECT IFNULL (id, 0) AS id FROM tabela

Zatem jeśli id będzie równe NULL zostanie zwrócone 0, a jeśli nie będzie równe NULL zostanie zwrócone id. Dla tabeli postaci:

id name
NULL AAAAAAAA
2 BBBBBBBB
-3 CCCCCCCC
NULL DDDDDDDD
6 EEEEEEEE

otrzymamy:

id name
0 AAAAAAAA
2 BBBBBBBB
-3 CCCCCCCC
0 DDDDDDDD
6 EEEEEEEE

Konstrukcja NULLIF przyjmuje dwa parametry wejściowe. Przykładowo:

SELECT id, nr, NULLIF(id, nr) AS wynik FROM tabela

Konstrukcja ta zwróci NULL jeśli id i number będą równe, natomiast jeśli nie będą równe zwróci id. Przykładowo dla tablicy:

id nr
2 3
2 5
-3 -3
2 4
6 6

Otrzymamy:

id nr wynik
2 3 2
2 5 2
-3 -3 NULL
2 4 2
6 6 NULL

=NULL i !=NULL nie działa!

Gdy chcemy sprawdzić czy wartość jakiejś kolumny w danym rekordzie jest nieokreślona musimy użyć określonej składni zapytania. Dla wartości nieokreślonej nie działa to tak jak w przypadku zwykłych zapytań:

SELECT id FROM tabela WHERE id=2;

I nie zadziała coś podobnego jak:

SELECT tresc FROM tabela WHERE tresc=NULL;

Bądź:

SELECT tresc FROM tabela WHERE tresc!=NULL;

Jeśli chcemy wybrać wiersze z tabeli w których pole tresc jest nieokreślone użyjemy składni:

SELECT tresc FROM tabela WHERE tresc IS NULL;

Podobnie jeśli chcemy wybrać wiersze z tabeli w których pole tresc nie jest nieokreślone użyjemy składni:

SELECT tresc FROM tabela WHERE tresc IS NOT NULL;

Dostęp do poszczególnych znaków w stringu

Żeby uzyskać dostęp do poszczególnych znaków w stringu można użyć wyrażenia:

$txt = 'To jest przykład';
$przyklad = $txt{3};

W efekcie zmienna $przyklad będzie zawierać literę j.
Rzecz przydatna, gdy potrzebujemy przeanalizować string litera po literze bądź dokonać jakiś operacji na poszczególnych literach.

Bo zawsze zapominam – printf

Mimo, że PHP automatycznie nadaje odpowiednie typy zmiennym, przydaje się czasem funkcja umożliwiająca formatowanie liczb. Taką funkcją, jest znana programistom C++, funkcja printf. Przyjmuje ona na sposób formatowania oraz to co ma zostać sformatowane.

Przykłady:

$liczba = 12;

Wówczas aby liczbę sformatować jako binarną, piszemy:

printf("%b", $liczba);

Otrzymujemy w wyniku: 10

$liczba = 12;

Wówczas aby liczbę sformatować jako ósemkową, piszemy:

printf("%o", $liczba);

Otrzymujemy w wyniku: 14

$liczba = 123;

Wówczas aby liczbę sformatować jako szesnastkową, piszemy:

printf("%x", $liczba);

Otrzymujemy w wyniku: 7b

$liczba = 123;

Wówczas aby liczbę sformatować jako szesnastkową z użyciem dużych liter, piszemy:

printf("%X", $liczba);

Otrzymujemy w wyniku: 7B

$liczba = 69;

Aby otrzymać kod ASCII danej liczby, piszemy:

printf("%c", $liczba);

Otrzymujemy w wyniku: O (duża litera O)

$liczba = -10;

Aby sformatować liczbę jako liczbę ze znakiem, piszemy:

printf("%d", $liczba);

Otrzymujemy w wyniku: -10

$liczba = 10;

Aby sformatować liczbę jako liczbę bez znaku, piszemy:

printf("%u", $liczba);

Otrzymujemy w wyniku: 10

$liczba = 34.23132;

Aby sformatować liczbę jako liczbę zmiennoprzecinkową, piszemy:

printf("%f", $liczba);

Otrzymujemy w wyniku: 34.2313

Dodatkowo możemy w przypadku liczb zmiennoprzecinkowych określić ile miejsc po przecinku danej liczby ma być wyświetlane

printf("%.3f", $liczba);

Otrzymujemy w wyniku: 34.231

Wczytywanie skryptów MySQL z pliku

Dwa sposoby na realizowanie skryptów zapisanych w plikach tekstowych.
Z poziomu konsoli:

mysql nazwa_bazy_danych < nazwa_pliku_tekstowego

Z poziomu sesji MySQL:

SOURCE nazwa_pliku_tekstowego