| Rubrika Php / mysql
Zložené MySQL dotazy – LEFT JOIN
Každý kodér časom dospeje k nutnosti, resp. výhodnosti využitia
zložitejších mysql dotazov s využitím spájania tabuliek – JOINovania.
Joinovanie nie je nič náročné treba si len zapamätať zopár pravidiel.
V tomto krátkom článku budem písať iby o LEFT JOIN, ostatné
druhy – right join, inner join, outer join a pod. vynechám, pretože osobne
v nich nevidím veľký zmysel.
Predstavme si modelovú situáciu, kde máme tabuľku s produktami a tabuľku s produktovými kategóriami.
Tabuľka produkty – príklad záznamu
| názov_produktu | kategória_produktu | id_produktu |
|---|---|---|
| kosmodisk | 5 | 1 |
Tabuľka kategórie – príklad záznamu
| názov_kategórie | id_kategórie |
|---|---|
| bolesť chrbta | 5 |
Z príkladu je vidieť, že priradenie produktu „Kosmodisk“ do
kategórie „Bolesť chrbta“ je urobená na základe číselného kľúča.
Stĺpec kategoria_produktu v tabuľke produkty obsahuje ID
kategórie z tabuľky kategórie.
Pokiaľ chceme vypísať naraz aj názov kategórie aj názov produktu, potrebovali by sme bez použitia LEFT JOIN dva MySQL dotazy, ktoré by mohli vyzerať takto:
<? $query=mysql_query("SELECT nazov_produktu,kategoria_produktu FROM produkty"); $row=mysql_fetch_assoc($query); $query=mysql_query("SELECT nazov_kategorie FROM kategorie WHERE id = '".$row['id_kategorie']."'"); $rowB=mysql_fetch_assoc($query); echo $row['nazov_produktu']; // vystup bude "kosmodisk" echo $rowB['nazov_kategorie']; // vystup bude "bolest chrbta" ?>
Na prvý pohľad takéto riešenie nie je celkom ideálne, už len čo sa prehľadnosti týka. Preto je dobré v takýchto situáciach použiť konštrukciu SQL dotazu s LEFT JOIN. Tá by v našom prípade vyzerala takto:
<? $query=" SELECT produkty.nazov_produktu, kategorie.nazov_kategorie FROM produkty LEFT JOIN kategorie ON produkty.kategoria_produktu = kategorie.id"; ?>
Takýto vykonaný SQL dotaz potom vráti aj názov produktu aj názov
kategórie, ktorý je uložený v samostatnej tabuľke. Základom JOINovania je
parameter ON. Ten určuje ktorý kľúč v jednej tabuľke sa má
viazať na kľúč v inej tabuľke. Z tohto príkladu je zrejmé, že kľúč
kategoria_produktu v tabuľke produkty sa má
viazať na kľúč id v tabuľke kategorie.
Databázový stroj teda vyberie z tabuľky kategorie ten záznam,
ktorý ma ID zodpovedajúce číslu v stĺpci kategoria_produktu
v tabuľke produkty.
Znie to možno na prvý pohľad zložito no postupom času prídete na to, že joinovanie je veľmi intuitívne a sprehľadňuje zápis. Čo sa týka samotného zlepšenia výkonnosti aplikácie, použitie JOINov by ju malo podstatne zrýchliť (viď http://www.codersrevolution.com/…vs-subselect). Prejaviť sa to však môže iba na skutočne veľkých databázach.
Tomáš Mašek
naspäť
prispieť do diskusie [7]
Vyhľadávanie
Posledných 5 komentárov
Viac z rubriky
Ako ochrániť includované PHP súbory?
Automatické generovanie formulárov z MySQL
Automatický prevod texu na hyperlink
Cachovanie do HTML súboru
Cachovanie s pomocou funkcií serialize/unserialize
Čiernobiele obrázky v PHP
Dynamická tvorba URL
Fulltext ako názov stĺpca v tabuľke
Getcwd – Ako ľahko získať absolútnu cestu
Import z Excelu do MySQL databázy
Maximálny timeout vykonávania SQL skriptu
Microtime – rýchlosť načítania stránky
Odstránenie diakritiky v PHP pomocou iconv()
Overovanie a kontrola formulárov v PHP
Parsovanie XML súboru v PHP
PHP a zachytenie nedoručených mailov
PHP funkcia implode
Porovnávanie a dátovy typ DATE
Práca so súbormi pri zapnutom safe_mode
Prihlasovanie uživateľa prostredníctvom $_SESSION
Real-time kontrola e-mailovej adresy AJAX-om
Spracovanie dátového typu ENUM do HTML selectu
Strpos a offset – nájdenie výskytu znaku v reťazci
Tip: Generovanie PDF súborov
Tip: jednoduché šifrovanie a dešifrovanie v PHP
Tip: správne includovanie súborov
Ukladanie jazykových verzií statických textov
Veľmi jednoduchý návod na pekné URI
Vkladanie obrázkov do databázy
Výber záznamov začínajúcich číslom
Vyčistenie viacrozmerného poľa
Vyhľadávanie, pekné URI a diakritika
Vypísanie abecedy v PHP
Využívanie unikátnych kľúčov v MySQL databáze
Zaradenie jednej položky do viacerých kategórií
Zistenie hodnoty ďalšieho ID – autoincrement
Zvýrazňovanie syntaxe kódu – GeSHi
Pridať komentár



