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. 2024-04-19]. 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. 2024-04-19]. 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í

- Kolik zaberou Visty?
- Kolik najdou, tolik zaberou.

 

Pro zamyšlení

Představte si to ticho, kdyby lidé říkali jen to, co vědí.
[Karel Čapek]