Závěrečný díl trilogie Bastardi je venku. Proč v něm hraju?
5
5
Cookies
Stránka testována v prohlížečích
při 176x220 až 1680x1050 px (ne všechny kombinace).
Důraz na FF při 1280x1024 px.
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.
$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
.
- Jak se máš?
- Super, jen mě hrozně bolí prsty.
- A co se stalo?
- Včera jsme na chatu měli oslavu a celou noc jsme zpívali.
Raději zemřu nežli bych pravdu odvolal a lži a klamu sloužil.
[Mistr Jan Hus]
(c) Ing. Martin Adámek, www.adamek.cz , Náchod