[Mysql] Ophalen van records binnen datumreeks

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Topicstarter
Ik moet op mijn werk een overzicht maken van alle absenties voor een kalendermaand. Alleen helaas zie ik de oplossing niet om alle orders op te halen die binnen een maand vallen. Op een of andere manier gaat het fout en ik begin een beetje radeloos te worden omdat het vandaag af moet zijn :(

Ik heb de volgende tabel waarin alle absenties worden opgeslagen. De start en end velden bevat een unix timestamp met de begin- en einddatum of de vakantie/absentie.

SQL:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `tl_absences` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `pid` int(10) unsigned NOT NULL default '0',
  `type` varchar(100) NOT NULL default '',
  `tstamp` int(10) unsigned NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `start` int(10) unsigned NOT NULL default '0',
  `end` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `pid` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


Met de volgende absenties records:

SQL:
1
2
3
4
INSERT INTO `tl_absences` (`id`, `pid`, `tstamp`, `name`, `type`, `start`, `end`) VALUES
(1, 0, 1320301001, 'Kerstvakantie', 'holiday', 1293145200, 1293922800),
(2, 0, 1320301001, 'Uitrusten in Nederland', 'holiday', 1320274800, 1320534000),
(3, 0, 1320301554, 'Sinterklaas', 'holiday', 1322434800, 1322953200);


Nu wil ik graag alle absenties ophalen die binnen een bepaalde datumreeks vallen. Alleen het probleem is dat is dat ik niet de absentie terug krijg die of halverwege de maand beginnen of afloopt.

Ik heb de volgende query geprobeerd alleen zie ik niet wat ik fout doe:

SQL:
1
2
3
4
5
6
7
8
# 1320102000 = 01-11-2011
# 1320102000 = 01-11-2011
SELECT * 
FROM `tl_absences`
WHERE 
(start <= 1320102000 OR start >= 1320102000) AND 
(end <= 1322607600  OR end  >= 1322607600) AND 
type='holiday'


Ik krijg nu namelijk absenties terug zelfs van begin dit jaar :(
Wat is de correct manier op zulke data op te halen?

Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 10:41
Wist je dat MySQL ook een datum type heeft? Wellicht dat dat wat handiger werkt.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Topicstarter
Hmm, goed punt, ik zal dat eens proberen! Het bestaande systeem uit 2003 sla het op met unix timestamp :)

Acties:
  • 0 Henk 'm!

  • bartbh
  • Registratie: Maart 2004
  • Niet online
MySQL heeft inderdaad een datum type, daarmee kun je ook de datumfuncties van MySQL gebruiken.

Daarnaast klopt je query niet

(start <= 1320102000 OR start >= 1320102000) AND
(end <= 1322607600 OR end >= 1322607600) AND


Hiermee pak inderdaad alle rijen. Je pakt hiermee namelijk alle start en alle end velden.

edit:

Want je zoekt eigenlijk op de rijen waarbij 'start' kleiner of gelijk is aan X of groter of gelijk is aan X. Oftewel, dat zijn alle rijen.

[ Voor 18% gewijzigd door bartbh op 03-11-2011 09:05 ]


Acties:
  • 0 Henk 'm!

  • MikeN
  • Registratie: April 2001
  • Laatst online: 20-09 12:51
SQL:
1
2
WHERE 
(start <= 1322607600 AND end >= 1320102000)


Basis boolean logic?

Acties:
  • 0 Henk 'm!

  • G8rb8n
  • Registratie: Maart 2007
  • Laatst online: 15:04
[spuit 11....]

[ Voor 93% gewijzigd door G8rb8n op 03-11-2011 09:05 ]


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Topicstarter
Hmm, de suggestie van MikeN lijkt te werken. Ik heb dit eerder vanochtend ook geprobeerd alleen toen werkte het niet.

Bedankt allemaal. Stomme fout gemaakt :X
Ik *dacht* dat ik strtotime('this month') de eerste dag van de huidige maand teruggeeft maar dat is natuurlijk niet. Dit moest strtotime('first day of this month') zijn en dan laat ie wel alles zien. Wat een stomheid 8)7

Ik ben echt aan vakantie toe :+

[ Voor 59% gewijzigd door alienfruit op 03-11-2011 10:43 ]

Pagina: 1