TagiCSS, HTMLPaździernik 25, 2018
Napisał(a) Kawałek Kodu
Bawiłeś się kiedyś w chowanego? Może masz ochotę zrobić to dziś? Pokażę Ci jak coś ukryć. Tak porządnie i w określonym czasie. Na tym blogu było trochę magii, ale powtarzam: ukryjemy "coś", a nie Ciebie, więc bez obaw. Będziemy pokazywać i ukrywać element HTML. Właściwie takie cuda zdziałamy, że sam będzie się pokazywał i znikał w określonym momencie.
Cel i jego osiągnięcie brzmi banalnie, ale wyjawię Ci więcej szczegółów. Efekt ten został praktycznie wykorzystany, prawie przy takim założeniu, na stronie gier dla dzieci Buliba.pl. Ponieważ projekt strony jest niekomfortowy/niegrywalny/nieprzeznaczony do układu portrait, to wtedy pokazuje się plansza z odpowiednią informacją. Dodatkowo (co tam dzieje się po bardzo długim czasie) plansza ma zniknąć po kilku sekundach.
TagiSQLPaździernik 25, 2018
Napisał(a) Kawałek Kodu
Zapytanie przestawne pozwala nam na obrócenie wyniku zapytania o 90 stopni i zamianę niektórych wierszy w kolumny (trochę jak rozkładanie parasola). Na skrzyżowaniu nowopowstałych kolumn oraz pozostałych wierszy otrzymujemy wartości z kolumn, których nie wykorzystaliśmy ani do wierszy ani do kolumn. Prostym przykładem niech będzie tabela mecz gdzie przechowujemy nazwiska graczy, numery meczów oraz ilość strzelonych goli, czyli mamy kolumny: gracz, mecz, polowa, gole. Za pomocą tabeli przestawnej chcemy uzyskać czytelniejszy widok: będziemy mieć wiersze z nazwiskami, kolumny odpowiadające poszczególnym meczom, a komórki będą zawierać sumę strzelonych goli.
Czyli z tabeli:
gracz
mecz
polowa
gole
marek
1
1
2
zdzisiek
1
1
1
marek
1
2
3
heniek
1
1
1
heniek
2
2
1
zdzisiek
2
1
1
marek
3
2
2
heniek
3
1
1
heniek
3
2
1
zdzisiek
3
2
3
chcemy otrzymać:
gracz
mecz1
mecz2
mecz3
heniek
1
1
2
marek
5
0
2
zdzisiek
1
1
3
W systemach bazodanowych Oracle czy też MSSQL mamy dostępne operatory PIVOT, ale my najczęściej zajmujemy się na tym blogu MySQL, więc fajnie by było przyjrzeć się temu operatorowi w tymże systemie.
Przyjrzałeś się? Bo ja się przyglądałem i nie znalazłem. Niestety póki co ten operator jest niedostępny.
TagiCSS, HTMLPaździernik 23, 2018
Napisał(a) Kawałek Kodu
Pewnie miałeś już w życiu styczność z dymkiem. Czy to podpalając dywan w pokoju rodziców w wieku pięciu lat, czy też paląc z kolegami swoją pierwszą fajkę (pokoju, oczywiście!). W HTML dymki są bardziej pozytywnymi wydarzeniami. Stosuje się je do przekazania dodatkowych informacji użytkownikowi, których przed daną akcją nie chcemy pokazywać. Możemy się spotkać z dymkami walidacji formularzy, gdzie informujemy o błędniem wypełnionym polu, czy też szczegółach jakiejś opcji po najechaniu myszą.
Dymek najczęściej ma kształt prostokąta z zaokrąglonymi narożnikami i mały trójkącik na dole pozycjonujący cały dymek. Czyli mamy tu dwa elementy. Pokażmy kod HTML i stylowanie CSS takiego dymka.
<div class="dymek">To jest informacja<span></span></div>
TagiSQLPaździernik 18, 2018
Napisał(a) Kawałek Kodu
Łączyliśmy już w lewo, prawo i w obydwie strony. Nie łączyliśmy jeszcze w górę i w dół, czyli pionowo. Dziś właśnie o łączeniu pionowym wyników, czyli o UNION, UNION ALL, INTERSECT oraz EXCEPT (MINUS). Inaczej nazywamy je złączeniami na zbiorach.
A dlaczego w ogóle określenie "pionowe"? Bo operujemy na dwóch lub więcej zbiorach uzyskanych z kolejnych, występujących jeden pod drugim, zapytaniach. Czyli łączymy w dół.
UNION i UNION ALL zapewne już znasz z MySQL i być może nawet je stosowałeś. Operator UNION pozwala na połączenie wyników uzyskanych z X (X>1, bo głupio robić UNION na jednym zapytaniu) zapytań. W przypadku UNION będzie to suma wyników bez powtórzeń, a w przypadku UNION ALL duplikaty mogą spać spokojnie.
Przykładowe tabele:
klient1:
id_klient
login
1
marek
2
zdzisiek
3
heniek
klient2:
id_klient
login
1
marek
3
heniek
4
janek
i zapytanie:
SELECT * FROM klient1 AS k1
UNION /* lub UNION ALL */
SELECT * FROM klient2 AS k2
Wynik z UNION:
id_klient
login
1
marek
2
zdzisiek
3
heniek
4
janek
Wynik z UNION ALL:
id_klient
login
1
marek
2
zdzisiek
3
heniek
1
marek
3
heniek
4
janek
O ile UNION i UNION ALL występują w MySQL natywnie, to co z INTERSECT oraz EXCEPT?
TagiSQLPaździernik 16, 2018
Napisał(a) Kawałek Kodu
Dziś wpis na FULL! Jak iść, to na całość!
Na Twoim ulubionym blogu pojawiały się już wpisy związane ze złączeniem LEFT JOIN, być może słyszałeś o złączeniu RIGHT JOIN (to jakby odbicie lustrzane LEFT JOIN), ale nie pojawiały się o FULL JOIN.
Skorzystamy z naszego oklepanego przykładu, czyli tabeli klient oraz tabeli zamowienie. W takim przypadku złączenie FULL JOIN wybierze nam klientów bez zamówień, klientów z zamówieniami (lub zamówienia klientów), oraz zamówienia bez klientów. Praktycznym przykładem może być po prostu widok gdzie chcemy zobaczyć listę klientów i ich ewentualne zamówienia oraz zamówienia bez przypisanych klientów. Pewnie zadajesz sobie pytanie skąd zamówienia bez klientów, ale możemy w tym momencie założyć, że ze względu na RODO (to już nie jest typ złączenia...) usunąłeś klientów, ale pozostawiłeś ich zamówienia. Co prawda nie dowiesz się kto dokładnie złożył takiego typu zamówienie, ale będziesz miec zachowaną historię sprzedaży.
Zbudujmy więc zapytanie oparte na tym złączeniu:
SELECT k.id_klient,z.id_zamowienie
FROM klient AS k
FULL OUTER JOIN zamowienie AS z ON z.id_klient=k.id_klient
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL OUTER JOIN...
Czyli tyle czytania na marne?
Jak w takim razie wykonać takie złączenie w MySQL?
TagiPHP, SQLPaździernik 11, 2018
Napisał(a) Kawałek Kodu
Zdarzyło Ci się pewnie nie raz pracować na więcej niż jednej tabeli (tabeli bazodanowej, a nie wyników meczu). A jeśli tak, to pewnie zdarzyło Ci się również łączyć obydwie przy pomocy złączenia LEFT JOIN. Jeśli nie, to pozwól, że wspomnę pokrótce na czym polega takie złączenie.
Załóżmy, że masz tabele klientów oraz tabele ich zamówień. Jeśli złączysz obydwie poprzez warunek w klauzuli WHERE lub poprzez INNER JOIN, otrzymasz wynik przedstawiający klientów i ich zamówienia. Ale tylko tych klientów, którzy złożyli (tym razem nie złączyli!) zamówienia. Tych, którzy zarejestrowali się w serwisie, ale nie mają zamówień, nie będzie widać w wyniku tego zapytania. Aby wyświetlić wszystkich klientów i zamówienia, należy użyć wspomnianiego złączenia LEFT JOIN. Dla takich klientów w miejscu ich zamówień otrzymasz wartości null.
Wyobraź sobie, że budujesz teraz system, który posiada możliwość filtracji wyników, a dokładnie pokazania wszystkich klientów i tylko tych z zamówieniami (pewnie jest tam jakiś ptaszek w formularzu, którym włączasz i wyłączasz tą opcję).
I tu rodzi się odwieczne pytanie. Czy da się? Czy da się zbudować tak zapytanie, żeby przekazując określoną wartość wybrać daną pulę wyników i wykorzystać tylko jedno złączenie?