PHP - Část XXI. (SQL - získávání dat z databázových tabulek III) - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



PHP

PHP - Část XXI. (SQL - získávání dat z databázových tabulek III)

22. listopadu 2000, 00.00 | pokračování seriálu o práci s SQL databází pomocí PHP. Dnes hlavně spojování tabulek v dotazu a další funkce spojené s příkazem SELECT.

Dnešní článek přináší objasnění propojování více databázových tabulek v jednom SQL dotazu - v našem případě SQL příkazu SELECT. Již v prvním článku, který se zabýval spoluprácí PHP a MySQL, jsem nastínil problematiku vztahů mezi databázovými tabulkami. Tabulky, které jsou spolu ve vztahu, jsou propojeny primárním a cizím klíčem, což jsou položky v tabulkách, které mají pro navzájem související záznamy stejnou hodnotu. Abychom si vše mohli předvést na příkladu, vytvoříme si novou databázi s názvem např. 'db', která bude obsahovat dvě tabulky. V první budou zaznamenány údaje o zaměstnancích a v druhé budou údaje o odděleních ve firmě, ve kterých pracují. Jak vytvořit novou databázi a tabulku již známe z minulých článků, proto si zde uvedeme jen struktury tabulek. První tabulka bude mít následující strukturu:

CREATE TABLE zamestnanci (
                       rc char(11) NOT NULL PRIMARY KEY,
                       jmeno varchar(40),
                       adresa varchar(60),
                       plat decimal(10, 2),
                       oddeleni int);";

Druhá tabulka bude mít následující strukturu:

CREATE TABLE oddeleni (
                    cislo_oddeleni int NOT NULL PRIMARY KEY,
                    nazev_oddeleni varchar(25));";

Co která tabulka obsahuje za data by mělo být jasné z názvu položek - jen uvádím, že v tabulce zamestnanci je položka oddeleni, která bude obsahovat číslo oddělení, shodné s daným číslem oddělení v tabulce oddeleni. Mnohé z vás teď jistě napadlo, proč pro uchování údajů o odděleních používat další tabulku, když název oddělení můžeme napsat u každého zaměstnance přímo. Důvod je jednoduchý - představte si např., že se někdy v budoucnu přejmenuje nějaké oddělení, ve kterém pracuje X lidí. Kdybychom na uložení údajů o oddělení nepoužili samostatnou tabulku, museli bychom název oddělení měnit u každého zaměstnance zvlášť. Tak ho změníme jen v tabulce obsahující název oddělení. Nad těmito možnými komplikacemi je vhodné se zamyslet vždy ještě před návrhem databázové struktury.

Nyní si do tabulek vložte několik pomyslných zaměstnanců a vytvořte si několik pomyslných oddělení. Nebudu zde uvádět, jak přidat údaje do tabulky, protože jsem se tomu věnoval někdy v minulosti. Nyní již k propojení tabulek. Zde je jasné, že máme propojeny tabulky zamestnanci a oddeleni, které jsou ve vztahu oddeleni = cislo_oddeleni. Ukážeme si tedy příklad, jak vypsat jména zaměstnanců a názvy oddělení, ve kterých pracují:

$sql = "SELECT zamestnanci.jmeno, oddeleni.nazev_oddeleni
               FROM zamestnanci, oddeleni 
               WHERE zamestnanci.oddeleni = oddeleni.cislo_oddeleni;";

Dobrým zvykem je zde v příkazu SELECT uvádět názvy požadovaných položek ve tvaru 'tabulka.položka' a to z toho důvodu, že v rozsáhlejších databázích se mohou vyskytnout v několika tabulkách položky se shodným názvem, které bychom potom jen těžko jednoznačně identifikovali. Za klauzulí FROM musíme uvést všechny relevantní tabulky, ze kterých požadované položky pocházejí. Podmínka za klauzulí WHERE zajišťuje, že ve výsledku bude u každého zaměstnance vypsáno oddělení, které má stejné číslo, jaké je uvedeno u zaměstnance. To je celý princip propojování tabulek v jednom SQL dotazu. Vše se dá ještě kombinovat pomocí klauzulí GROUP BY a HAVING, ale protože tyhle články mají pouze nastínit problematiku jazyka SQL, odkážu zájemce na materiály, které se věnují přímo jazyku SQL (na internetu je jich mnoho i v češtině).

Poslední, co zde u příkazu SELECT uvedu, je možnost výstupu z databáze v setříděné podobě. To se provádí pomocí klauzule ORDER BY, za kterou se uvádí položka tabulky, podle které se mají data na výstupu setřídit. Pokud bychom tedy chtěli vypsat jména a adresy všech zaměstnanců a chtěli bychom mít výpis tříděný abecedně podle jmen zaměstnanců, použili bychom:

$sql = "SELECT jmeno, adresa FROM zamestnanci ORDER BY jmeno;";

Existuje i možnost sestupného třídění, stačí na konec zapsat modifikátor DESC:

$sql = "SELECT jmeno, adresa FROM zamestnanci ORDER BY jmeno DESC;";

Ve starších verzích MySQL nastal problém při třídění položek, jejichž hodnoty obsahovaly diakritické znaky. Tento problém by již však v současné verzi měl být vyřešen.

Tím jsme dokončili stručný přehled možností SQL příkazu SELECT, v příštím článku se naučíme mazat a modifikovat záznamy v databázové tabulce.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: