Autor Zpráva
FUYO
Profil *
Dobrý den,

v databázi mám spoustu záznamů, kde ve sloupci mám datum_vlozeni (datetime), takže mám data např.

(1,  'Nadpis 1', '2014-01-02 20:30:14', ''),
(2, 'Nadpis 2',  '2015-05-01 13:52:05', ''),
(3, 'Nadpis 3', '2015-06-03 15:11:31', ''),
(4, 'Nadpis 4',  '2015-07-02 21:23:48', ''),
(5,  'Nadpis 5', '2015-07-02 21:45:55', '')

výsledky vypisuji
$sql_celkem = dibi::fetchAll("SELECT * FROM zaznamy");

nyní bych potřeboval vypisovat pouze záznamy, ktrere byly přidány za měsíc červenec tedy 1.7.2015-31.7.2015, lze toho nějakým způsobem docílit?

Děkuji.
Keeehi
Profil
Mělo by stačit přidat podmínku
WHERE datum_vlozeni BETWEEN '2015-07-01' AND '2015-07-31')
FUYO
Profil *
Keeehi:
funguje, děkuji
Vachi
Profil
Já to mám vyřešeno takhle

WHERE datum_vlozeni BETWEEN DATE_SUB(CURDATE(),INTERVAL (DAY(CURDATE())-1) DAY) AND LAST_DAY(NOW())
juriad
Profil
Je-li to možné, je lepší rozsah vypočítat v PHP. A nejlépe mít funkci parametrizovanou rokem a měsícem, které defaultně budou odpovídat aktuálním. Je to univerzálnější, nezatěžuje to databázi a umožňuje to cachovat dotazy.
FUYO
Profil *
Ještě bych měl takový technicky dotaz, když tedy budu mít '2015-07-01' AND '2015-07-31'

je to včetně toho 31.7 ? tedy i záznam přidaný 31.7.2015 23:59 ?
juriad
Profil
Ne. Keeehi si zřejmě neuvědomil, že se jedná o datetime a nikoli date.
Lepší podmínka je tedy:
WHERE datum_vlozeni >= '2015-07-01' AND datum_vlozeni < '2015-08-01')
Větší nebo rovno prvnímu dni tohoto měsíce a striktně menší než první den následujícího měsíce.

Nebo do toho dotazu můžeš přidat i ty sekundy:
WHERE datum_vlozeni BETWEEN '2015-07-01 00:00:00' AND '2015-07-31 23:59:59')
Raději jsem je přidal i k tomu počátku, aby byla zachována symetrie.

Podívej se na ukázku.
FUYO
Profil *
juriad:
supr, moc děkuji za vysvětlení
Keeehi
Profil
juriad:
Raději jsem je přidal i k tomu počátku, aby byla zachována symetrie.
Hlavně se taky nemusí pro druhý údaj dopočítávat, který je to měsíc a rok a podle toho doplňovat poslední den.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0