PHP - złączenie ( tzw. join ) w zapytaniu SELECT

DZIAŁANIE: brak działania
 

Kod:

brak kodu :P

Ewentualne Objaśnienia:

Przypuśćmy, że mamy w bazie 2 tabele : linki, autorzy. Tabela linki zawiera pola : id, link, data_dodania, idautora . Tabela autorzy zawiera pola : id, autor, mail . Wiadomo, że jest to ze sobą ściśle powiązane - w jednej tabeli mamy dodane linki ( na przykład dla jakiegoś systemu katalogu stron WWW ) a w drugiej autorów - czyli tych którzy te linki dodają . No i chcielibyśmy wyświetlić na przykład sobie na stronie : link, nazwę autora, mail autora. Bez sensowne jest robienie jakby dwóch zapytań do bazy - do 2 różnych tabel i wyświetlanie. Nie bardzo to pasuje prawda ? Wiadomo jest, że w tabeli linki - idautora odpowiada polu id w tabeli autorzy.
Tutaj przychodzi nam z rozwiązaniem nowa forma instrukcji SELECT zwana złączeniem (ang. join). Pozwala nam to na wyświetlanie naszych danych - połączonych ze sobą oczywiście ( związanych ze sobą ) poprzez jedno zapytanie SELECT, składnia takiego zapytania :

SELECT pola FROM tabele WHERE warunek definiujący zależności/relację między tabelami -  tak więc w naszym przykładzie zapytanie to wyglądałoby tak :

SELECT link, autor, mail FROM linki, autorzy WHERE idautora=autorzy.id - prawda, że proste ? A na dodatek bardzo wygodne. Określamy pola, z których chcemy korzystać, następnie tabele - z nich odczytujemy dane oraz warunek zależności - jak widać tutaj idautora z tabeli linki odpowiada id z tabeli autorzy.

Złączenia wykorzystamy dalej - przedstawię Wam zbudowany system katalogu stron, wraz z dobrze zaprojektowaną bazą danych gdzie generalnie wszystkie tabele będą zależne od siebie.

Kolejną ważną rzeczą związaną ze złączeniami - jest parametr IGNORE w zapytaniu INSERT - o co chodzi ? To dość proste. Tworzymy na przykład jedną tabelę gdzie mamy zbiór jakiś filmików, tabelę gdzie mamy zbiór kategorii tych filmików oraz trzecią tabele, która określa relacje między tymi pierwszymi dwoma tabelami. Czyli po prostu w tej trzeciej - podajemy id filmiku z tabeli z filmikami oraz id kategorii ( z tabeli z kategoriami ), do której ten filmik przypisujemy.
Rzeczą logiczną jest, że w tej naszej tabeli określającej zależności ( przypisanie dla filmiku kategorii ) nie może pojawić się więcej niż raz jakaś para identyfikatorów.
Dlatego też dodajemy gdzieś w naszym skrypcie, służącym do dodawania nowych filmików oraz zarazem przypisywania kategorii słowo IGNORE w zapytaniu INSERT, czyli :

INSERT IGNORE INTO.... - dzięki temu mamy pewność, że gdyby próbowano wstawić do tabeli wartości ( parę wartości ), które już tam są - serwer MySQL zignoruje to po prostu. Gdybyśmy tego słowa nie użyli - zakomunikowano by nam błąd.