Kawałek Kodu

Co tu się odskryptala?! Czyli programistyczne porady na luzie

Zły brat bliźniak, czyli usuwanie duplikatów w MySQL.

Zdarza się, że chcemy w tabeli usunąć duplikaty. Przemilczmy powód, dla którego nie powinny się one tam znaleźć. Natomiast innym powodem, o którym możemy mówić, może być sytuacja gdy po prostu z jakiegoś źródła dostajemy takie dane (przychodzą z urządzenia rejestrującego lub importujemy dane zewnętrzne).

Dajmy za przykład tabelę gdzie przechowujemy temperatury z danego dnia. Ale urządzenie odczytujące temperaturę i zapisujące do bazy danych robi to w ciągu doby kilkukrotnie.

Czytaj dalej

Święta, święta i po świętach, czyli dni świąteczne w MySQL.

Chyba zetknąłeś się Czytelniku z problemem uwzględniania dni świątecznych w systemach zależnych od czasu/daty. Jeśli nie, to się zetkniesz, a dziś zapraszam Cię na skosztowanie tego co może Ci się przydać.

Zaczniemy od wygenerowania danych dotyczących stałych świąt. Użyjemy do tego następującego zapytania (numer 1):

SELECT CONCAT(rok,dm) AS data
FROM
(SELECT '-01-01' AS dm UNION ALL SELECT '-01-06' UNION ALL SELECT '-05-01' UNION ALL SELECT '-05-03' UNION ALL SELECT '-08-15' UNION ALL SELECT '-11-01' UNION ALL SELECT '-11-11' UNION ALL SELECT '-12-25' UNION ALL SELECT '-12-26') AS dni,
(SELECT 2018 AS rok) AS lata

Utworzyliśmy tu zapytanie korzystające z wyniku iloczynu karezjańskiego (każdy z każdym) dwóch podzapytań. Jednym zapytaniem generujemy dni i miesiące Świąt, drugim rok. W tym przypadku rok ustaliliśmy na stałe, choć można użyć wyrażenia: YEAR(CURDATE()). Jeśli zapytanie będzie wybierać kilka lat (poprzez UNION ALL), wtedy wynik zapytania wygeneruje dni świąteczne dla tych kilku lat.

Czytaj dalej

"Która godzina? Pyta rodzina". Czyli o czasie w MySQL.

Na pewno nie raz budując zapytania w MySQL zetknąłeś się z potrzebą wybierania określonej daty lub godziny, czy to w liście zwracanych pól czy też w klauzuli WHERE. Nie będę dziś opisywać szczegółowo każdej wbudowanej funkcji do operowania na dacie / godzinie. Choć kilka z nich omówimy, to w większości wykorzystamy je oraz inne funkcje do obliczeń, których nie można osiągnąć bezpośrednio z tej grupy funkcji.

Zaczniemy od najprostszych.

Czytaj dalej

Marian, a czy ty pamiętasz o naszej rocznicy? Czyli jak wygenerować "kalendarz" w MySQL.

Zdarza się, że z jakiegoś powodu potrzebujesz ciągły zakres rekordów od określonej daty do innej zadanej daty. Czyli zakres potocznie zwany kalendarzem.

Można to osiągnąć na dwa sposoby:

  1. Utworzyć tabelę i zapełnić ją wartościami od 0 do X. A następnie taką tabelę łączyć poprzez CROSS JOIN z zapytaniem wybierającym datę startową i dodawac do daty wartości 0-X.
  2. Wygenerować wartości od 0 do X poprzez zapytanie i połączyć ją analogicznie jak powyżej.

Jak wygląda drugi sposób?

Czytaj dalej

Do pełna poproszę! Czyli array_fill w MySQL(?)

Czy można wyczarować rekordy znikąd? Jasne! I to bez magicznej różdżki!

Zaczniemy od najprostszego zaklęcia, które wyczaruje nam 10 rekordów z wartościami od 0 do 9.

SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9

Trochę mało. Jak wygląda drugie zaklęcie?

SELECT a.a+b.a*10 FROM 
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS a
  CROSS JOIN
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS b
Czytaj dalej

Ważą się czyjeś losy, czyli jak losować rekordy z wagą.

Jeśli trafiłeś na ten artykuł, to być może miałeś łut szczęścia. Nie musisz mieć jednak szczęścia, aby losować rekordy. W MySQL zazwyczaj używałeś do tego funkcji RAND. Co prawda ta funkcja samodzielnie nie losuje rekordu, ale w połączeniu z klauzulą LIMIT 1, daje to, czego od niej oczekujemy. Tyle, że nie zawsze, bo czasem człowiek chce czegoś więcej. I być może chciałeś losować rekordy z jakąś wagą, czyli niektóre wartości miały pojawiać się w wyniku częściej, a niektóre rzadziej.

Na razie nie przykładajmy uwagi do wagi.

Czytaj dalej