Zkratka na hlavní stranu: Alt + Shift + horní 2(ě)
Linkedin FB e-mail Google Plus Twitter

Hledat na tomto webu

 
 

SQL: Svislé spojení tabulek
se zachováním informace o zdroji každého řádku

 

Vytvořeno
28.6.2012

 

Pokud potřebujete v SQL vertikálně spojit tabulky se stejnou strukturou,
seřadit v nich společně data podle zvoleného kritéria,
a zachovat si informaci, ze které tabulky který řádek pochází
(vytvořit sloupec s označením zdroje),

můžete pomocí sjednocení UNION spojit dotazy SELECT,
a abyste věděli, ze které tabulky řádek je, můžete do každého dotazu přidat konstantu.

Dá se totiž předpokládat, že v každé tabulce bude id (či jiný primární klíč) začínat od jedničky,
a že podle id tedy příslušnost řádku k tabulce nepoznáte.

Příklad se syntaxí PHP…
$dotaz    =  "SELECT *, 'prvni' as zdroj FROM prvnitabulka WHERE verejny='1' AND datum <= NOW() AND rubrika>=18 AND rubrika<=25
              UNION 
              SELECT *, 'druhy' as zdroj FROM druhatabulka WHERE verejny='1' AND datum <= NOW() AND (rubrika=1 OR rubrika=5 OR rubrika=7)
              ORDER BY datum DESC 
              LIMIT 50;"
$vysledek =   mysql_query($dotaz);
                  
while ($radek = mysql_fetch_array($vysledek)) 
  { // Tady máme kromě ostatních sloupců k dispozici i proměnnou $radek["zdroj"], ve které nalezneme hodnotu 'prvni', nebo 'druhy';
  }

Podmínky pro výběr dat (datum – např. aby se nezobrazovaly články, které teprve mají být vydány; rubrika) můžete zadat za WHERE v každém dotazu samostatně, tedy i v jednotlivých dotazech různě.
Pokud chcete vypsat např. 50 nejnovějších článků myšleno dohromady z obou zdrojů,
tak „ORDER BY” a LIMIT napište za celé spojení, aby se vybralo opravdu 50 nejnovějších článků z obou zdrojů souhrnně.

V praxi takové spojení využijete např. když budete potřebovat vytvořit sestavu nejnovějších článků ze dvou původně izolovaných časopisů,
pokud mají tabulky stejnou strukturu a jsou ve stejné databázi.
Díky zachování informace o původu článku pak budete vědět, kam máte odkázat na plné znění článku.

Data ze všech tabulek tak jsou sloučena v jednom výsledku
a podle sloupce zdroj poznáte, ze které původní tabulky který řádek pochází.

Pokud těch tabulek potřebujete spojit více, tak nic nebrání tomu, abyste textový řetězec s dotazem vytvořili pomocí for cyklu (nebo foreach nad polem) a konstantu do každého dotazu vkládali automatizovaně (přímo pořadové číslo z proměnné $i, kterou budete počítat průchody cyklu; nebo pomocí pole textových řetězců můžete vkládat názvy).

Více se o sjednocení tabulek pomocí UNION dozvíte na w3c schools.com – SQL UNION Operator (jiný web, nový panel).

Skok nahoru na: Navigační menu
(klávesová zkratka Alt + Shift + horní „5”)

Zaujala Vás tato stránka?

  • Přidat do záložek (Ctrl+D)
  • Sdílet odkaz (vysílačka)Skok nahoru na:
  • Vytisknout (Ctrl+P)
  • Citovat podle ČSN ISO 690

    Tuto stránku

    ADÁMEK, Martin. SQL: Svislé spojení tabulek: se zachováním informace o zdroji každého řádku. Martin Adámek [online]. Náchod / Meziměstí [cit. 2025-06-17]. Dostupné z: https://www.adamek.cz/sw/sql/svisle-spojeni-tabulek

    Celý web

    ADÁMEK, Martin. Martin Adámek [online]. Náchod / Meziměstí [cit. 2025-06-17]. Dostupné z: https://www.adamek.cz

 

 
 

Národní kulturní dědictví

WebArchiv – Stránky archivovány Národní knihovnou ČR Tyto stránky jsou pravidelně archivovány Národní knihovnou ČR pro svou kulturní, vzdělávací, vědeckou, výzkumnou nebo jinou informační hodnotu za účelem dokumentace autentického vzorku českého webu. Jsou součástí kolekce českých webových stránek, které NK ČR hodlá dlouhodobě uchovávat a zpřístupňovat pro budoucí generace. Jejich záznam je součástí České národní bibliografie a katalogu NK ČR.  

 

 
 

Pro rozptýlení

Přijde informatik k piánu a pečlivě si ho prohlíží:
-Hmm, jenom 84 kláves, z toho 1/3 funkčních, všechny nepopsané, ačkoliv… shift ovládaný nohou. Originální.

 

Pro zamyšlení

Ano, mnoho se změnilo, ale lidé zůstali stejní; jenomže teď víme líp, kdo je kdo. Kdo je slušný, byl slušný vždycky; kdo byl věrný, byl věrný i teď. Kdo se točí s větrem, točil se s větrem i dřív. Kdo myslí, že teď přišla jeho chvíle, myslí vždycky jenom na sebe. Nikdo se nestává přeběhlíkem, kdo jím nebyl vždycky. Kdo mění víru, neměl žádnou. Člověka nepředěláš, jenom se Ti vybarví.
[Karel Čapek]