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

| Rubrika Php / mysql

Diskusia k článku

Zložené MySQL dotazy – LEFT JOINZobraziť článok

Martin
Dátum a čas 05. 04. 2010, 21:46

v prehladnosti by som problem nevidel, ide mi hlavne o zataz na serveri

masko
Dátum a čas 05. 04. 2010, 19:59

4-5 left joinov by som nerobil uz len preto, ze je z toho velmi neprehladny kod. co sa tyka vykonu - podla mna to bude porovnatelne.

Martin
Dátum a čas 05. 04. 2010, 14:32

Keby sa porovnali 2 metódy oľadom optimalizácie výkonu prikazov php a požiadaviek na MySQL. V pripade, že potrebujem spojit databázu so 4-5 databazami je výhodne to urobit:
1. cez spojenie s 4-5 LEFT JOIN-ami
2. alebo spojenie s 1 LEFT JOINOM, ostatne jednoduchšie údaje (kraj, typ registracie a pod.) dať ešte predtým vybrať a uložiť do poľa kraje, typ registrácii a pod
ďakujem

demigod
Dátum a čas 14. 12. 2009, 03:19

vdaka....velmi pomohlo :)

Jozefko
Dátum a čas 12. 10. 2009, 11:09 E-mail jojo [a] joj.joj

Nie je jednoduchšie použiť
SELECT produkty.nazov_produktu, kategorie.nazov_kategorie
FROM produkty, kategorie
WHERE produkty.kategoria_produktu = kategorie.id_kategorie;
???

masko
Dátum a čas 18. 05. 2009, 21:04

pouzitie LEFT JOIN alebo RIGHT JOIN mierne modifikuje vysledok dotazu do databazy, tak napriklad ak pouzijes LEFT JOIN, tak vo vysledku bude zahrnuty aj riadok z lavej tabulky, ktory v pravej tabulke nema zodpovedajuci pár. ak spravis RIGHT JOIN, tak je to to iste, len opacne (riadok z pravej tabulky, ktory nema vlavo par).

normalny JOIN vybere iba spárované riadky.

co sa tyka INNER a OUTER JOIN, v tom sa presne nevyznam, ale pokial viem, nie je vobec nutne to pouzivat. vystacis si s LEFT JOIN, RIGHT JOIN a obycajnym JOIN

qacer
Dátum a čas 18. 05. 2009, 20:07 E-mail qacer8 [a] gmail.com

Mna by zaujimal princip fungovania right join a inner join, teda skor aspon zakladne pouzitie a rozdiely medzi nimi. Teraz ked uz mam hotovy multijazycny web (samozrejme tou prvou uvedenou syntaxou :-/) som narazil na prikazy left join, right join a inner join v niektorych clankoch az na tomto blogu som nasiel konecne normalne vysvetlenie aspon zakladov co to je

Naspäť naspäť

Pridať komentár

Koľko je na ruke prstov?

Náhľad článku

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.

RSS