Od XLS do CSV – szybki wsad do bazy danych MySQL

komputerek_mysqlSą takie sytuacje gdy wymagane jest wykonanie szybkiego wsadu danych do tabeli. Oczywiście można na prędce stworzyć odpowiedni skrypt PhP, który przetworzy dane wsadowe do postaci zapytań SQL. Jednak nie zawsze ma to uzasadnienie i nie zawsze ilość czasu jest wystarczająca na stworzenie takiego mechanizmu.

Właśnie w takich sytuacjach przydatna może być komputerekkombinacja dwóch narzędzi: phpMyadmin i … to nie żart Ms Excel. Arkusz kalkulacyjny posłuży nam jako narzędzie do preparowania odpowiednio sformatowanego pliku CSV. Phpmyadmin posłuży nam natomiast do wykonania natychmiastowego wsadu do bazy.

Czytaj dalej

PHP – operacje na ciągach znaków – zamiana liter na małe

komputerek_phpOperacje na ciągach znaków to jedne z popularniejszych zadań programistycznych  realizowanych w typowym projekcie serwisu internetowego tworzonego przy pomocy PhP. Jedną z popularnych operacji wykonywanych na ciągach znaków to konwersja na ciągi złożone jedynie z małych liter. Realizacja tego zadania jest raczej trywialna. Wystarczy, że użyjecie dostępną w PhP komputerek_mysqlfunkcję strtolower() lub w przypadku zamiany pierwszej litery lcfirst().

Zadanie robi się już nieco trudniejsze gdy przyjedzie Wam pracować z ciągami znaków wśród których znajdą się litery odpowiadające znakom diakretycznym charakterystycznym dla danego narodowego alfabetu. Użycie funkcji strtolower oraz lcfirst nie spowoduje że tego typu duże litery będą zamienione na małe. Znaki wykraczające poza zakres liter ‚alphabetic’ są pomijane przez te funkcję.

Czytaj dalej

Odrobinę lewy LEFT JOIN z NULL

komputerek_mysqlDziś zauważyłem kolejną ciekawą właściwość MySQL, którą warto odnotować. W przypadku wykonywania złożonych zapytań na „nierównych” tabelach z zastosowaniem złączenia typu LEFT (lub RIGHT) JOIN w wynikach możemy uzyskać rekordy w których część pól jest równa NULL. Jest to oczywista konsekwencja niepełnych danych w jednaj (lub obu) tabelach. Nie zawsze jest to normalny i pożądany stan bazy danych, ale ten temat pomińmy. Czytaj dalej

Kaskadowe usuwanie rekordów w MySQL (mechanizm składowania InnoDB)

komputerek_mysqlWielu programistów korzystających w swoich projektach z tandemu złożonego z PHP i MySQL poświęca swój czas na programową obsługę integralności danych znajdujących się w bazie. Jest oczywiście całkiem duże grono osób, które zupełnie nie zaprzątają sobie tym głowy. Śmietnik w bazie danych oczywiście nie zaszkodzi prostym małym projektom i może najwyżej zaszkodzić reputacji programisty tworzącemu tego typu serwisy. W przypadku rozbudowanych aplikacji w których baza danych składa się z dziesiątek tabel rozrastających się w trakcie życia projektu do rozmiarów liczonych w gigabajty, porządek jest już rzeczą niebagatelną i relatywnie wpływającą na szybkość działania witryny. Właśnie w takich przypadkach warto skorzystać z mechanizmów jakie oferują relacyjne bazy danych.

Czytaj dalej

MySQL NULL == (decimal) 0.00

komputerek_phpDziś MySQL zapewnił mi dość ciekawe doświadczenie. Spotkałem się z dziwną właściwością tej bazy danych. Jedna z tabel jaką wykorzystuję w pracy ma zdefiniowane pole WYNIK jako: decimal(3,2) a domyślna komputerek_mysqlwartość tego pola to NULL. Tabela ta jest wykorzystywana jako miejsc w którym trzymane są wyniki testów punktowanych lub zapisywany jest bieżący stan odpowiedzi.

W zależności od zawartości pola WYNIK test traktowany jest jako zapisany (wartość NULL) lub wysłany (wartość liczbowa decimal z uzyskanym wynikiem). W ostatnim czasie spotkałem się z dziwnym zachowaniem tego mechanizmu testów punktowanych. Korzystając z formularza otwartego w kilku oknach, można było nadpisać pierwotnie wysłane dane z odpowiedziami testu. Błąd ten wynikał z faktu, że mechanizm nie rozpoznawał w prawidłowy sposób statusu wysłanego testu. Było to o tyle dziwne, że patrząc od strony rekordów znajdujących się w bazie danych wyglądało to całkowicie prawidłowo.

Czytaj dalej