Add to Google Reader or Homepage Prihlásiť sa k odberu RSS

| 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_pro­duktu 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_pro­duktu 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_pro­duktu 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äť naspäť Pridať komentár k článku prispieť do diskusie [7]

Vyhľadávanie

v názvoch článkov v textoch článkov

Pridať komentár

Koľko je na ruke prstov?

RSS