OPDATERING
En meget bedre indeksvenlig måde at forespørge på dine data for en række datoer
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);
Bemærk: Du anvender ikke nogen funktion på dine kolonnedata, men udfører i stedet alle nødvendige beregninger på højre side af betingelserne (som er konstanter og kun evalueres én gang efter udførelse). På denne måde giver du MySQL mulighed for at drage fordel af indeks(er), som du måske har på timestampfield
kolonne.
Oprindeligt svar:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Bemærk: Selvom denne forespørgsel giver de korrekte resultater, ugyldiggør den effektivt den korrekte brug af indekset/indekserne, som du måtte have på timestampfield
kolonne (hvilket betyder, at MySQL vil blive tvunget til at udføre en fuldscanning)
Her er SQLFiddle demo