Ik wil graag alle records krijgen van de huidige maand (mei dus op dit moment).

Ik heb in de database een veld genaamd datum waar dit in staat: 2014-05-01.

Nu heb ik deze query:

<?php $q = 'SELECT * FROM beoordelingen WHERE MONTH(CURDATE()) AND score = 5'; ?>


Maar deze pakt alle maanden bij elkaar ipv enkel deze maand... waarom?
Wat je nu doet zou hetzelfde zijn als:

SELECT * FROM beoordelingen WHERE 1 AND score = 5

Ik denk dat dit is wat je wilt.
SELECT * FROM beoordelingen WHERE EXTRACT(YEAR_MONTH FROM datum) = EXTRACT(YEAR_MONTH FROM CURDATE()) AND score = 5

Als je alleen MONTH zou extracten krijg je ook resultaten uit 2013, 2012, 2011 etc als je die hebt.
Een wat ingewikkeldere query, maar met als voordeel dat er geindexeerd kan worden:

SELECT * FROM beoordelingen
WHERE datum
BETWEEN
	(LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY) - INTERVAL 1 MONTH
AND
	LAST_DAY(CURRENT_DATE)
AND score = 5

Oke top bedankt! Het is gelukt.

Ik heb ook een veld in mijn database met datetime, hier werkt het helaas anders lijkt wel...

Ik wil de aantal uitnodiginge van de huidige maand weten, dit is de query so far:

<?php $q = 'SELECT * FROM emails WHERE klant_id = '.$_SESSION['fbpuserid'].' AND domein_id = '.getCurrentDomeinId().' AND uitnodigings_datum = ....... <deze maand...> ?> 
wat gaat er mis als je de query van Ger toepast?

Of desnoods, als je werkt met MONTH(NOW()) = MONTH(datetimekolom) AND YEAR(NOW()) = YEAR(datetimekolom)

?

(PS: het is wel overzichtelijk als je een query over meerdere regels verspreid (zoals Ger bijvoorbeeld doet)
Ivo P op 06/05/2014 14:29:46

wat gaat er mis als je de query van Ger toepast?

Of desnoods, als je werkt met MONTH(NOW()) = MONTH(datetimekolom) AND YEAR(NOW()) = YEAR(datetimekolom)

?

(PS: het is wel overzichtelijk als je een query over meerdere regels verspreid (zoals Ger bijvoorbeeld doet)


Ik heb de code nu zo:

<?php SELECT * FROM emails WHERE klant_id = 50 AND domein_id = 36 AND uitnodigings_datum BETWEEN (LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY) AND LAST_DAY(CURRENT_DATE) ?>


Maar het resulaat is leeg terwijl er vandaag een uitnodiging is verstuurd, de datetime in de database is: 2014-05-06 12:12:27

Mvg Furio
is je enter knop kapot?

wat geeft:


SELECT * 
FROM emails 
WHERE klant_id = 50 
  AND domein_id = 36 
  AND MONTH(uitnodigings_datum) = MONTH(NOW())
  AND YEAR(uitnodigings_datum) = YEAR(NOW())


of


SELECT * 
FROM emails 
WHERE klant_id = 50 
  AND domein_id = 36 
  AND MONTH(uitnodigings_datum) = 5
  AND YEAR(uitnodigings_datum) = 2014


is er geen mysql-foutmelding?
Ivo P op 06/05/2014 15:24:32

is je enter knop kapot?

wat geeft:


SELECT * 
FROM emails 
WHERE klant_id = 50 
  AND domein_id = 36 
  AND MONTH(uitnodigings_datum) = MONTH(NOW())
  AND YEAR(uitnodigings_datum) = YEAR(NOW())


of


SELECT * 
FROM emails 
WHERE klant_id = 50 
  AND domein_id = 36 
  AND MONTH(uitnodigings_datum) = 5
  AND YEAR(uitnodigings_datum) = 2014


is er geen mysql-foutmelding?



Werkt perfect, top!
Masr waarom Ger's oplossing dan niet werkt?

Reageren