АКТУАЛИЗИРАНЕ
Много по-добър удобен за индексите начин за запитване на вашите данни за диапазон от дати
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);
Забележка: Вие не прилагате никаква функция към данните в колоната си, а по-скоро правите всички необходими изчисления от дясната страна на условията (които са константи и се оценяват само веднъж след изпълнение). По този начин позволявате на MySQL да се възползва от индекси, които може да имате в timestampfield
колона.
Оригинален отговор:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Забележка: Въпреки че тази заявка дава правилните резултати, тя ефективно обезсилва правилното използване на индекса(ите), които може да имате в timestampfield
колона (което означава, че MySQL ще бъде принуден да извърши пълно сканиране)
Ето SQLPiddle демонстрация