| Rubrika Php / mysql
Diskusia k článku
Zložené MySQL dotazy – LEFT JOIN
Martin
05. 04. 2010, 21:46
v prehladnosti by som problem nevidel, ide mi hlavne o zataz na serveri
masko
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
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
14. 12. 2009, 03:19
vdaka....velmi pomohlo :)
Jozefko
12. 10. 2009, 11:09
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
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
18. 05. 2009, 20:07
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äť
Pridať komentár
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.

