[Grafika] [WebTip] [Fotografování] [Galerie] [MujMac] [Printing]
  Redakce: info@builder.cz   Inzerce: reklama@grafika.cz
Diskuzní fóra
.Net (219)
ASP (536)
ActiveX (33)
Assembler (289)
C++ Builder (5087)
Databáze (1381)
Delphi (3993)
DelphiX (264)
DirectX (77)
Java (1730)
JavaScript (1435)
Php (9741)
PowerBuilder (1455)
Problémy a algoritmy (1225)
Programování v Linuxu (421)
Python (30)
Visual Basic (1312)
Visual C++ (1285)
Wap (53)
Web (2117)
Win32 (809)
Textová inzerce
Grafika Publishing, vydavatel http://www.grafika.cz/, http://www.webtip.cz/, http://www.webtip.cz/ a dalších hledá nové posily pro svůj tvůrčí tým.
Chcete se stát tvůrcem prestižních webových projektů?

Bližší informace
Služby Builder.cz
  • Bazar - koupím(15) Nový
       - Koupím učebnici (skripta): Programování v jazyce Object Pascal
       - hledam knihu c++, c#
  • Bazar - prodám(36)
       - Visual Basic Enterprise Ed. 5.0
       - Microsoft Windows XP Professional
  • Hledám práci(47) Nový
       - Programátor PHP, ASP, VBA, JScript, VBS, MySQL a HTML
       - Sprava LINUX/UNIXovych serveru a siti
  • Nabízíme práci(45)
       - PROGRAMÁTOR-ANALYTIK na plný úvazek.
       - HTML, JavaScript, ASP, PHP, MySQL
  • Projekty(15)
       - Diskusní fórum
       - GUANO - začátek i konec
  • Nejčtenější články!
    Naučte se programovat v Delphi (11. díl) - Práce se soubory
    Sériové rozhraní a mobil (3. díl)
    Sériové rozhraní v Delphi (2. díl)
    Upload obrázků
    JavaDoc - lehký úvod
    Allegro - Knihovna pro programování her II.
    Standardní funkční objekty v C++
    Práce se zásobníkem v Assembleru
    PE cryptor - kódování
    Allegro - Knihovna pro programování her III.
    Jak spustit program a počkat na jeho ukončení - podruhé
    Nejnovější články!
    Upload - II a logout
    Sériové rozhraní a mobil II (4. díl)
    Přesměrování Program Entry Pointu
    BASSMOD - Zvuková knihovna
    Jak spustit program a počkat na jeho ukončení - podruhé
    JavaDoc - příkazová řádka
    Upload obrázků
    Allegro - Knihovna pro programování her III.
    Sériové rozhraní a mobil (3. díl)
    JavaDoc - kompletní průvodce tagy
    PHP - Část XXI. (SQL - získávání dat z databázových tabulek III)
    Php krok za krokem
    Předchozí díl: PHP - Část XX. (SQL - získávání dat z databáze II.)

    Následující díl: PHP - Část XXII. (MySQL - modifikace a mazání dat v tabulce)
    Autor: Marek Bražina
    Rubrika: PHP
    Publikováno: 22.11. 2000
      Tisk článku

    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.



    Hodnocení článku
    1 | 2 | 3 | 4 | 5
    Aktuální známka: 2.08
    (Počet známek: 425)

    Komentáře k článku
    -- Žádné příspěvky --
    Přidat příspěvek





    mailto:%20info@builder.cz
    Vydává Grafika Publishing, s.r.o.
    Copyright (c) 1997-2001 Všechna práva vyhrazena