UPPDATERA
Ett mycket bättre indexvänligt sätt att fråga efter dina data för ett antal datum
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);
Obs! Du tillämpar inte någon funktion på dina kolumndata, utan gör snarare alla nödvändiga beräkningar på höger sida av villkoren (som är konstanter och utvärderas endast en gång efter exekvering). På så sätt låter du MySQL dra nytta av index som du kan ha i timestampfield
kolumn.
Ursprungligt svar:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Obs! Även om den här frågan ger de korrekta resultaten ogiltigförklarar den i praktiken korrekt användning av indexet/indexen som du kan ha i timestampfield
kolumn (vilket betyder att MySQL kommer att tvingas utföra en fullskanning)
Här är SQLFiddle demo