AKTUALIZACE
Mnohem lepší způsob, jak se dotazovat na data pro rozsah dat, který je vhodný pro indexy
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
AND timestampfield < UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);
Poznámka: Na data ve sloupcích neaplikujete žádnou funkci, ale všechny potřebné výpočty provádíte na pravé straně podmínek (což jsou konstanty a jsou vyhodnoceny pouze jednou po provedení). Tímto způsobem umožníte MySQL těžit z indexů, které můžete mít v timestampfield
sloupec.
Původní odpověď:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Poznámka: Ačkoli tento dotaz poskytuje správné výsledky, účinně znehodnocuje správné použití indexů, které byste mohli mít v timestampfield
sloupec (to znamená, že MySQL bude nuceno provést úplné skenování)
Zde je SQLFiddle demo