Autor Zpráva
SwimX
Profil
Dobrý den,
do db vkládám mimo jiné čas pomoci INSERT ... NOW()
sloupec v db je DATETIME (klidně můžu dát jiný, ale tendle mi přišel nejrozumější)

nyní potřebuju zjistit počet řádek které byli přidány dnes
SELECT count(*) as pocet FROM tabulka WHERE datum = CURDATE();
výsledkem je ovšem 0 přestože sem přidal 2 záznamy.

jak mám porovnávat DATE s DATETIMEem?

Děkuji
Alphard
Profil
zkuste
WHERE cas >= CURDATE();
SwimX
Profil
Alphard
to je i celkem logické :) Děkuji
Aesir
Profil
SwimX:
Jen upozorním na to, že v případě mysql (předpokládám) se vám na takový dotaz nebude uplatňovat query cache, ale tento dotaz asi nebude případ, kdy by to bylo potřeba řešit.
SwimX
Profil
Aesir
Díky, to jsem ani neznal. Bylo by tedy lepší místo CURDATE() dávat datum phpkem?

(je to limit. uživatel smí přidat denně jen určitý počet příspěků. Tento dotaz se provede vždy, když si uživatel otevře stránka s příspěvky (a těch je..) pokud je pocet v limitu pak mu to zobrazí formulář, jinak ne. Těch dotazů bude celkem dost)
Aesir
Profil
SwimX:
Ano, pokud vám to nerozboří jinou (účinnější cache), je výhodnější si aktuální datum předgenerovat ve skriptu.
SwimX
Profil
Aesir
Ano, pokud vám to nerozboří jinou (účinnější cache)
O žádné nevím :)
nicméně změnil jsem dotaz na:
$query = "SELECT count(*) as pocet FROM komentare WHERE autor = '{$_SESSION['nick']}' and datum >= ".date("Y-m-d", time());

Včera to krásně beželo, po určitém počtu mi to znemožnilo poslat další.
Dnes (by měl být počet 0) mi to nechtělo zase nic poslat (stránku sem měl pořád v tabu, pouze jsem ji aktualioval F5)
vyměnil jsem datum za CURDATE a už to bylo v pořádku.
To je správné chování té cache dotazu? Nebo sem něco přehlíd:
Aesir
Profil
SwimX:
Správné chování query cache je takové, že když pošlete podruhé stejný dotaz, tak neprochází všechny data, ale vrátí ty z posledního volání. Při každé změné tabulky jsou ale dotazy k dané tabulky z cache vymazány, takže vámi popisovaný problém cache nezpůsobí. Spíš bych hledal problém v tom na co se ptáte a jestli jsou k tomu v db relevantní data.
Ideálně každý dotaz někam logovat a když se vám výsledek nezdá, tak dotaz prozkouma - spustit jej ručně v konzoli apod.
Kajman_
Profil *
SwimX
Obalte si si datum do apostrofů jako nck, ať se nedělá výpočet.
SwimX
Profil
Aesir
vámi popisovaný problém cache nezpůsobí
myslel jsem si to, jinak by byla celkem nepoužitelná.

Spíš bych hledal problém v tom na co se ptáte a jestli jsou k tomu v db relevantní data.
To je v pořádku

Ideálně každý dotaz někam logovat a když se vám výsledek nezdá, tak dotaz prozkouma - spustit jej ručně v konzoli apod.
Tak to bych tam raději vrátil CURDATE()

Kajman_
to bylo ono. Díky.
Aesir
Profil
SwimX:
„Ideálně každý dotaz někam logovat a když se vám výsledek nezdá, tak dotaz prozkouma - spustit jej ručně v konzoli apod.“
Tak to bych tam raději vrátil CURDATE()

Myslel jsem samozřejmě při odhalování takových problémů, v odladěné aplikaci v produkčním prostředí určitě ne :) Ve vypsaném dotazu byste si pravděpodobně chybějících apostrofů všiml, takhle si toho všiml jeden ze tří přispěvovatelů v tomto vlákně ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0