Diskuze: Událost přes více dnů v kalendáři
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
zkusil bych třeba podmínku
WHERE datum BETWEEN datum_od AND datum_do
Podminkou je, ze sloupec musi byt casove razitko, timestamp, mozna datetime (integer cislo). Pokud to mas jako string, tak ti
datum BETWEEN datum_od AND datum_do -- ani
datum_od<datum AND datum<datum_do -- nepomuze.
Tohle jsem nemyslel..asi jsem to špatně vysvětlil. Jde mi o to, že já si
zadám do 2 inputů ve formuláři 2 datumy. Jeden je datum_od a druhý
datum_do. Což je rozsah plánované události. No a já když mám na vybraný
den událost, mám tam nějakou td class, tudíž si ho například podbarvím.
No a jde mi o to, abych nějakým způsobem získal ty dny mezi těmito dvěma
daty, abych si mohl nastavit td class u celého rozsahu těch dnů.. Asi to bude
nejjednodušeji řešené přes pole, ale možná je nějaký jiný způsob, tak
se raději ptám
Snad jsem to vysvětlit tentokrát srozumitelně.
jinak sloupce mám ve formátu date, takže tento příkaz funguje.. jen to není to, co potřebuji
SELECT x, y, z, DATE_SUB(date_do, date_do) as pocet_policek_k_obarveni FROM tabulka
jednoduše se zeptáš DB ... existuje nějaká událost jejíž
počáteční datum je <= a zároveň koncové datum >= než datum v
políčku kalendáře
jak píší kluci
WHERE datum BETWEEN datum_od AND datum_do -- nebo
WHERE datum_od <= datum AND datum <= datum_do
oba zápisy vybírají tzv. uzavřený interval tj. i krajní hodnoty
Jo, ale jemu unikaji zakladni programovaci znalosti Vytahne z tabulky radek s
intervalem a ted potrebuje z toho ziskat pocet policek, ktera ma obarvit. Coz
samozrejme muze spocitat uz na urovni sql dotazu. A nebo pouzit pro cyklus
podminku
for ($i = $datum_od; $i<$datum_do; $i++) // v pripade, ze to prevede
// z DATE sql prikazem na timestamp (integer) a nebo to muze
//prevest pomoci php, date(), time().
Pokud vím, tak to má uděláno tak, že chce obarvit dané pole kalendáře
podle toho zda existuje alespoň jedna událost... takže se dotazuje na každý
den, protože je to zahrnuto v cyklu pro "vykreslování" kalendáře. To s
čím zápasí, pokud správně chápu, je, že když má událost od 01-01 do
10-01, tak chce obarvit i pole 02-01 až 09-01...
Neřeším, že tento způsob třeba nemusí být efektivní. Protože jak jsi
zmínil, znalosti se kterými pracuje jsou omezené.
Navíc úplně nevím jak mu to funguje, když dotaz který píše že
používá je
$result = Db::query('
SELECT name, notes
FROM udalosti
WHERE date =?
', $datum);
if($result > 0){....
a v podmínce nemá datum_od ani datum_do a přitom píše, že v DB sloupce
má...
takže jak toho docílit tu napsáno má, nabádal jsem ho, že by bylo dobré
prostudovat zdejší materiály...
ať zkouší a učí se
Aha, ty jo, mas pravdu. V tom kodu jde den po dni a pro kazdy vola sql
dotaz.
A ja uvazoval spis o vlastnim reseni, kdy vytahnu jednim sql dotazem vsechny
radky, ktere budou mit co docineni s danym mesicem.
Ale ta podminka bude stejna.
To by mozna bylo lepsi to resit pres UNION do jednoho dotazu. Neco takoveho
$query = array();
$query[] = "SELECT name, notes, 1 as den FROM udalosti WHERE datum BETWEEN ? AND ?";
$query[] = "SELECT name, notes, 2 as den FROM udalosti WHERE datum BETWEEN ? AND ?"; // ... cyklem
$query = implode(' UNION ALL ', $query);
$result = Db::query($query, $datum_od_pro_1, $datum_do_pro_1, $datum_od_pro_2, $datum_do_pro_2...); // nebo jestli se tam da napsat array s hodnotami, neznam jeno sql-php kod
Pak to cyklem vypsat do pole policek. A pak z toho pole az generovat html tabulku.
Díky za rady kluci..
Jak psal Tomáš výše, to co popisuje je můj problém. To jak spočítat dny mezi tím jsem věděl.
Nějak to vymyslím.
Zobrazeno 11 zpráv z 11.