|
|
Čtení dat z databáze je možné realizovat dvěma způsoby:
1. SQL funkce Vzhledem k tomu, že se naše SQL funkce v průběhu vývoje občas mění, doporučujeme využívat PHP-funkce (mysql_query(), mssql_query(), sql_srv_query(), oci_execute() apod.). Berte ovšem v úvahu často rozdílnou znakovou sadu databáze a KEVISu a nezapomeňte data náležitě zpracovat pomocí funkce iconv()!
2. Funkce Kevisu Pro zjednodušení složitějších dotazů můžete využívat funkci db_select, jejíž využití nejlépe ukážu na příkladu. Základní tabulkou jsou "Osoby", navíc budeme joinovat tři různé tabulky pro demonstraci jednotlivých typů vazeb.
$fields = array( "SYS_Klic" => "Osoby__SYS_Klic", "SYS_ID" => "Osoby__SYS_ID", "SYS_Platnost" => "Osoby__SYS_Platnost", "Jmeno" => "Osoby__Jmeno", "Prijmeni" => "Osoby__Prijmeni", );
$joins = array( // 1. priklad vazby do ciselniku (N:1) "C__Ciselnik" => array( "table" => "kes_cishodnota", "cond" => "Osoby.Ciselnik = C__Ciselnik.SYS_ID and ((Osoby.SYS_Platnost_do is null and C__Ciselnik.SYS_Platnost_do is null) or (C__Ciselnik.SYS_Platnost_od<=Osoby.SYS_Platnost_do and (C__Ciselnik.SYS_Platnost_do>=Osoby.SYS_Platnost_do or C__Ciselnik.SYS_Platnost_do IS NULL)))", "fields" => array("hodnota" => "Osoby__Ciselnik"), ),
// 2. priklad vazby M:N "rel_Osoby_Auta_1" => array( "table" => "rel_Osoby_Auta_1", "cond" => "Osoby.SYS_ID = rel_Osoby_Auta_1.ID_1 and (rel_Osoby_Auta_1.SYS_Platnost_od <= Osoby.SYS_Platnost_do and (rel_Osoby_Auta_1.SYS_Platnost_do >= Osoby.SYS_Platnost_do or rel_Osoby_Auta_1.SYS_Platnost_do IS NULL) or (Osoby.SYS_Platnost='1' and rel_Osoby_Auta_1.SYS_Platnost='1'))", "fields" => array(), ), "N__Auta" => array( "table" => "Auta", "cond" => "rel_Osoby_Auta_1.ID_2 = N__Auta.SYS_ID and (N__Auta.SYS_Platnost_od <= Osoby.SYS_Platnost_do and (N__Auta.SYS_Platnost_do >= Osoby.SYS_Platnost_do or N__Auta.SYS_Platnost_do IS NULL) or (Osoby.SYS_Platnost='1' and N__Auta.SYS_Platnost='1'))", "fields" => array( "SYS_Klic" => "N__Auta__SYS_Klic", "SYS_ID" => "N__Auta__SYS_ID", "SYS_CV" => "N__Auta__SYS_CV", "Znacka" => "N__Auta__Znacka", "Barva" => "N__Auta__Barva", ), ),
// 3. priklad vazby 1:N "N__Hodinky" => array( "table" => "Hodinky", "cond" => "Osoby.SYS_ID = N__Hodinky.Majitel and (N__Hodinky.SYS_Platnost_od <= Osoby.SYS_Platnost_do and
or (Osoby.SYS_Platnost='1' and N__Hodinky.SYS_Platnost='1'))", "fields" => array( "SYS_Klic" => "N__Hodinky__SYS_Klic", "SYS_ID" => "N__Hodinky__SYS_ID", "SYS_CV" => "N__Hodinky__SYS_CV", "Znacka" => "N__Hodinky__Znacka", "Cena" => "N__Hodinky__Cena", ), ), );
$where = "Osoby.SYS_Klic > 1";
$order = array( "by" => array("Osoby.SYS_ID", "Osoby.SYS_Klic"), "how" => array("asc" , "desc") );
$listovani = array( "from" => 1, "count" => 50, );
$polozky = vrat_polozky($params, "kes_polozka.id_tabulka='".$params["id_tabulka"]."'", "kes_polozka.poradi asc"); reset($polozky); $datove_typy = array(); foreach($polozky as $polozka) $datove_typy[$polozka["nazev_polozka"]] = $polozka;
$zaznamy = db_select("Osoby", $fields, $joins, $where, $order, $listovani, $datove_typy);
Funkce db_select už v každém případě vrací data ve správné znakové sadě. |