Archiwa kategorii: Bazy danych

Użycie pola czasowego jako daty – bez informacji o godzinie

W bazie danych często rejestruje się czas wpisania danego rekordu – najprościej wykorzystać do tego funkcję bazy danych now(), a typami pól dla takich danych są przykładowo datetime w przypadku MySQL oraz timestamp without time zone dla PostgreSQL. Chcielibyśmy zrealizować prostego selecta, w którym czas będzie warunkiem, ale interesuje nas tylko data więc informacje o godzinie chcielibyśmy pominąć. Czytaj dalej

Zapytanie z like wykorzystujące pole z bazy danych

W przypadku realizacji prostego wyszukiwania zwłaszcza tam gdzie wydajność nie jest aż tak ważna można skorzystać z klauzuli like czy też ilike, która ignoruje wielkośc liter (PostgreSQL). Można również ten mechanizm wykorzystać aby sprawdzić nazwijmy to podejrzenia konfliktów jakiś zasobów – rodzi się pytanie jak sobie poradzić kiedy chcielibyśmy np. sprawdzić czy dane pole zawiera w sobie tekst z jakiegokolwiek innego rekordu tej samej tabeli. Czytaj dalej

Jak dodać jakiś okres czasu do daty w bazie danych PostgreSQL ?

Załóżmy, że mam jakąś bazkę (tutaj opieramy się na Postgresie), w której pewne rekordy są powiązane z datą czy jakimś znacznikiem czasu. Z jakiegoś powodu spotyka nas potrzeba przesunięcia dat w przód przykładowo o rok. Możemy rzecz jasna pobrać wszystkie rekordy, zmodyfikować je po stronie PHP funkcjami strtotime i date, a następnie zrobić update. Gdyby to była operacja jednorazowa to od biedy można tak zrobić, pytanie tylko po co skoro można łatwiej ? I jak zawsze twierdzę, warto uczyć się dobrych nawyków. Czytaj dalej

Kilkukrotny join do tej samej tabeli

Bywa tak, że w bazie danych mamy tabelę, w której znajduje się więcej niż jeden klucz obcy do tej samej (innej) tabeli. Na pierwszy „rzut oka” można pomyśleć, że bredzę i takich rzeczy się nie robi tylko wykorzystuje kolejną tabelę do stworzenia relacji – niby tak, niby nie :) Ale o tym później. Skupmy się na sytuacji kiedy potrzeba nam wyciągnąć dane z owej tabeli wraz z informacjami z tej, do której prowadzą klucze. Pojawia się pytanie jak w SQLu zapisać warunek kilkukrotnego złączenia do tej samej tabeli, co z duplikującymi się nazwami atrybutów (pól) itd., jak to ogarnąć ? Ja powiem Ci jak – do dzieła ! Czytaj dalej

Zapytanie insert z selectem

Zastanawiałe(a)ś się kiedyś czy można wstawić rekordy do bazy danych tak aby w określonych kolumnach dynamicznie załadowały się dane z innej tabeli ? Podam Ci przykład – masz tabelę obecności np. pracowników na szkoleniu. Pracownicy są podzieleni na grupy. W momencie uruchomienia szkolenia chcesz aby do bazy wpisały się domyślnie rekordy z obecnościami wszystkich członków danej grupy. Rzecz jest banalna – pobieramy wszystkich członków grupy, po stronie PHP robimy pętlę, w której do zmiennej np. $query dopisujemy kolejne instrukcje insert i po pętli wykonujemy zapytanie. Sposób oczywiście zadziała, ale można sobie poradzić z operacją zupełnie inaczej wykorzystując jedynie SQLa. Stworzymy więc zapytanie insert zawierające zapytanie select dzięki czemu pewne dane będą pobierane bezpośrednio z bazy. Czytaj dalej

IF w zapytaniu SQL

Instrukcja warunkowa w zapytaniu do bazy to bardzo przydatna rzecz, jednak w różnego rodzaju poradnikach, kursach nauki SQLa często nie wspomina się o takich możliwościach, a skupia się na podstawach czyli pobraniu rekordów, wstawieniu nowych, aktualizacji czy kasowaniu istniejących i różnego rodzaju złączeniach. Można również rzec, że po co komplikować zapytanie skoro możemy pewne operacje wykonać programistyczne w pętli już po odczycie rekordów ? Czytaj dalej

Problem z PostgreSQL i PHP pod WAMPSERVER

Swojego czasu trafiłem na wydawało się mi poważny problem. Mianowicie miałem wykonać projekt z przedmiotu relacyjne bazy danych i zainstalowałem sobie na lapku bazę PostgreSQL. Zainstalowany również miałem pakiet WAMPSERVER 2.0 – do pobrania tutaj. Nie będę opisywał tutaj czym jest WAMP bo nie o tym jest ten artykuł. Baza danych działała prawidłowo, ale problem pojawił się w momencie kiedy chciałem połączyć się z nią przez PHP. Czytaj dalej