MySQL: Przerywanie zapytań w trakcie działania.

Na pewno wpadliście kiedyś w pułapkę, w której podczas testowania wydajności / sposobu działania wpisaliście w okienko phpMyAdmina lub bezpośrednio w konsolę MySQLa nie do końca przemyślane zapytanie. Jeśli zawierało jakiś błąd składniowy, to sprawa jest prosta - na ekranie szybko pojawił się błąd. Co jednak w przypadku tych zapytań, które “mieliły się” przez dobre kilkanaście minut lub po prostu nie miały szans na zakończenie (w sensownym czasie) ze względu na dostępne zasoby systemowe? Jeśli zechcecie przeczytać niniejszy artykuł, powiem Wam co można z tym zrobić.

SQL: Zliczanie unikalnych wartości pola tabeli.

Język SQL to nie tylko genialne narzędzie pozwalające na manipulację danymi w bazie danych na stronie internetowej, ale także bardzo prosty sposób na wykonanie prostego sprawdzenia, czy pewne wartości zgadzają się z naszym stanem wiedzy. Oczywiście możliwe jest napisanie skryptu, który nam wszystko policzy, ale czy nie prościej jest stworzyć jedno zapytanie, które w bardzo czytelny sposób pokaże żądany zbiór danych? W dzisiejszym wpisie chciałbym pokazać właśnie jedno z takich przydatnych zapytań, pokazujące liczbę powtórzeń danej wartości w tabeli bazy danych.

Doctrine: Operator INDEX BY - indeksowanie wyników zapytania według wybranego pola.

Pobieranie informacji z baz(y) danych to jedna z podstawowych czynności, jaką wykonujemy podczas tworzenia różnego rodzaju stron internetowych. Aby uzyskać potrzebne dane w zdecydowanej większości przypadków wystarczy proste zapytanie SQL [w przypadku Doctrine możemy też wykorzystać język DQL]. Niektóre przypadki wymagają jednak potrzeba bardziej ambitnej ekwilibrystyki, aby przygotować odpowiedni zbiór rekordów. W dzisiejszym wpisie chciałbym pokazać jedną z możliwości biblioteki Doctrine - indeksowanie wyników zapytania według samodzielnie wybranego pola.

(My)SQL: Klauzule ORDER BY oraz LIMIT w zapytaniach z operatorem UNION.

W ciągu ostatnich tygodni naprawdę mocno pracowałem z przeróżnymi zapytaniami SQL, stąd też wynotowałem sobie kilka kwestii, które uznałem za warte opisania na blogu. Ostatnie dwa wpisy na ten temat, czyli znajdowanie rekordów sąsiednich, czy też operacje na przedziałach czasu to tylko wierzchołek góry lodowej problemów, z jakimi musiałem się zmierzyć, żeby osiągnąć zamierzony efekt. Dzisiaj chciałbym powiedzieć kilka słów na temat składni zapytań łączonych operatorem UNION - zapraszam do lektury.

(My)SQL: Jak znaleźć poprzedni i następny rekord w jednym zapytaniu?

Pracowałem ostatnio nad skryptem galerii w jednym z projektów i w pewnym momencie natrafiłem na problem polegający na wyświetlaniu w widoku pojedynczego zdjęcia linków kierujących do następnego i poprzedniego elementu. Nie jest to pierwszy raz, kiedy zostałem zmuszony do “poradzenia sobie” z tego typu sytuacją, dlatego uznałem, że warto opisać wykorzystane rozwiązanie na blogu. Standardowo mam nadzieję, że się przyda, zatem zapraszam do lektury. ;]

SQL: Operator REGEXP uwzględniający wielkość liter w wyrażeniu regularnym.

Jedną z bardzo przydatnych funkcji języka SQL, szczególnie w dialekcie MySQL, jest możliwość umieszczenia wyrażenia regularnego w klauzuli WHERE, przez co można w bardzo wygodny sposób ograniczyć zbiór rekordów, na którym operuje dane zapytanie. Jest to bardzo przydatne w przypadku pól tekstowych, gdzie mamy bardzo ograniczone pole manewru w kwestii porównywania tego typu wartości. Nie każdy jednak wie, że operator REGEXP domyślnie nie uwzględnia wielkości liter porównywanych ciągów znaków. W niniejszym wpisie chciałbym przedstawić Wam krótką poradę dotyczącą naprawy tego niedociągnięcia.

Modyfikator BINARY.

Aby zmusić operator REGEXP do porównywania pól tekstowych z uwzględnieniem wielkości liter, należy do zapytania wprowadzić modyfikator BINARY, a więc cały operator będzie brzmiał: REGEXP BINARY. Przykładowe zapytanie wykonane do bazy danych blogu:

[(My)SQL] Pobieranie identyfikatora nowego rekordu bez wykonywania zapytania INSERT.

Witajcie jeszcze raz. ;] Jak mogliście zauważyć, ostatnio znalazło się na moim blogu kilka wpisów na temat pewnych problemów z językiem SQL, a konkretnie kilku sytuacji brzegowych, w których uzyskanie interesujących nas danych okazało się nietrywialnym zadaniem. Nie inaczej będzie też dzisiaj, jako, że czytając różne materiały w serwisach związanych z programowaniem trafiłem na problem pobierania identyfikatora nowego rekordu bez wykonywania zbędnego zapytania INSERT. Nie namyślając się długo dopisałem ten problem do listy pomysłów, a dzisiaj doczekał się on realizacji. ;] Zapraszam do lektury.

Wstęp.

Żeby zobrazować problem, przyjmijmy przykładową strukturę bazy danych. Załóżmy, że mamy tabelę użytkowników, przykładowo px_users:

[WordPress] Wykluczanie kategorii wpisów w zapytaniu WP_Query.
Kilka tygodni temu miałem przyjemność odpoczywać po ciężkim semestrze na wyjeździe narciarskim. Zostałem wtedy poproszony o pomoc w ulepszeniu funkcjonalności bloga Duszpasterstwa Akademickiego “Drzewo Życia”, a konkretnie doinstalowaniu i skonfigurowaniu pewnych wtyczek do instalacji WordPressa. Ze względu na to, że jest to jeden z serwisów o który dbam jako administrator serwera, usiadłem przy komputerze z resztą “adminów” i zaczęliśmy kombinować nad stroną. Wstęp. Zainstalowaliśmy więc kilka wtyczek, z których większość pochodziła z moich sugestii i doświadczeń przy korzystaniu z WordPressa [nie ma to jak skromność, co nie?
[MiniBlog] Zapytanie SQL rozwiązujące łamigłówkę sudoku.
Zapytanie SQL rozwiązujące łamigłówkę sudoku w różnych dialektach SQL: Oracle PL/SQL - http://technology.amis.nl/blog/6404/oracle-rdbms-11gr2-solving-a-sudoku-using-recursive-subquery-factoring Microsoft T-SQL - http://www.vsj.co.uk/articles/display.asp?id=540 SQL Server: http://www.celko.com/puzzles.htm + wyjaśnienia http://www.db-innovations.co.uk/sudoku.htm - opis algorytmów Przyznam, że jak zobaczyłem nagłówek pierwszego artykułu, to na mojej twarzy pojawił się bardzo ciekawy grymas zdziwienia połączony z zaskoczeniem. Miłego czytania ;]