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).

Komentáře návštěvníků

Pokud máte účet na Facebooku

(nebo jiném z několika podporovaných serverů)

Chovejte se tady jako doma, ať vidíme, jak to u vás vypadá.
[nápis v linkovém autobusu]

A priori upřímně doufám, že mě obsah a forma příspěvků nedonutí k žádným moderátorským zásahům,
ale právo zásahu si vyhrazuji, protože tyto komentáře jsou přístupné komukoliv, kdo se zaregistroval na FB, a já netuším, co se tu může objevit.

V souvislosti s vkládáním odkazů na Vaše weby do komentářů nejsem hysterický. Odkaz na nekomerční web s relevantním obsahem, který může pomoci ostatním návštěvníkům, uvítám.

 
Načíst sem facebookové komentáře
pro čtení (aktuální počet: 0)
nebo přidání vlastního

(vyžadován javascript)
 
Komentáře se záměrně nenačítají samy, aby až do jejich načtení:
Facebook nevěděl, že jste tady právě vy,
nezkazila se přizpůsobivost webu a kvalita kódu
a nezvyšoval se datový tok.
 
Facebook ví, že tuto stránku teď někdo navštívil, ale na rozdíl od řešení obvyklého na drtivé většině jiných webů s FB pluginy tady díky mému způsobu realizace nepoznal, že jste to byli právě vy.

 

Pokud nemáte účet na Facebooku

Komentářový plugin Facebooku umožňuje vkládat komentáře i prostřednictvím účtů na několika dalších serverech (i když u nás nejsou moc používané).

Pokud nemáte žádný účet, prostřednictvím kterého byste sem mohli napsat komentář, neberte to jako diskriminaci. Zkrátka jsou tu komentáře alespoň pro uživatele FB a pár dalších serverů, což je lepší, než kdyby tu nebyly vůbec.

Kromě zjevné nevýhody má toto řešení i své výhody:

  • Při použití své FB identity by se většina uživatelů mohla zamyslet, co vypouští z prstů.
  • Odkaz na komentovanou stránku se může šířít Facebookem.
  • Ve výchozím nastavení se přednostně zobrazují komentáře zanechané návštěvníkovými facebookovými známými, což v důsledku podporuje obě předchozí výhody.

Navíc většina neuživatelů FB zůstává mimo FB ze svého vlastního rozhodnutí, takže jim neužívání Facebooku přináší různé pro ně důležité výhody (soukromí, čas), které snad vykompenzují nemožnost sem něco napsat.
Případně je možné jako náhradní možnost použít návštěvní knihu společnou pro celý web.
Časem třeba napíšu nebo nasadím nějaký jiný komentářový systém, který bude mít menší omezení pro komentátory, ale teď je tu alespoň toto.

Ale i tak si můžete alespoň přečíst komentáře od ostatních.

Strukturovaný opis komentářů

Pro:

  • paranoidní jedince, kteří nechtějí, aby FB věděl, že právě oni navštívili tuto stránku,
  • programátory, kterým se ta struktura vnořených polí bude líbit,
  • uživatele mobilních zařízení, kteří nechtějí, aby FB pokazil přizpůsobivost webu,
  • případný prohlížeč bez javascriptu
  • webový archiv, který si je takto uloží jako statický text dostupný v budoucnu i bez spolupráce Facebooku.
Array
(
    [http://www.adamek.cz/sw/sql/svisle-spojeni-tabulek/] => Array
        (
            [comments] => Array
                (
                    [data] => Array
                        (
                        )

                )

        )

)

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

Jste tu opakovaně?
Některé novinky na webu

RSS výstup zatím není

Nabízím

 

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 [cit. 2014-10-23]. Dostupné z: http://www.adamek.cz/sw/sql/svisle-spojeni-tabulek

    Celý web

    ADÁMEK, Martin. Martin Adámek [online]. Náchod [cit. 2014-10-23]. Dostupné z: http://www.adamek.cz

 

Dočíst na mobilním zařízení

QR kód: http://www.adamek.cz/sw/sql/svisle-spojeni-tabulek/ Otevřít tuto stránku na (jiném) mobilním telefonu nebo tabletu.

 

 

 
 

Národní kulturní dědictví

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í

Matematik a fyzik dali souhlas k psychologickému experimentu. Hladový matematik je posazen do židle ve velkém prázdném pokoji a naproti němu na druhou stranu pokoje je umístěno jeho nejoblíbenější jídlo.
Psycholog vysvětluje: „Vy budete sedět na židli. Já každou minutu posunu židli do poloviny vzdálenosti mezi jídlem a současnou pozicí židle.”
Matematik se podíval na psychologa se zhnusením: „Cože? Do toho nejdu. Přece víte, že se k tomu jídlu nikdy nedostanu!” Načež vstal a odešel.
Psycholog přivedl fyzika. Vysvětlil mu situaci, fyzikovi se rozzářily oči a začal slintat blahem. Psycholog byl zmaten. „Copak si neuvědomujete, že až k tomu jídlu se nikdy nedostanete?” Fyzik se usmál a odpověděl: „Jistě že uvědomuji. Ale z praktického hlediska se dostanu dostatečně blízko.”

 

Pro zamyšlení

Národ, který zapomene svoji historii, je odsouzen ji prožít znovu.
[(autor nezjištěn)]