我将重复发生的事件存储在events表中,这些事件发生在一年中的某些月份、任何时候和每年。例如:
CREATE TABLE events (
event_id tinyint(3) unsigned NOT NULL auto_increment,
name varchar(255) NOT NULL,
month_from tinyint(3) unsigned NOT NULL,
month_to tinyint(3) unsigned NOT NULL,
PRIMARY KEY (event_id) )
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
INSERT INTO events
(event_id, name, month_from, month_to)
VALUES
(1, 'Event ABC', 5, 11), (2, 'Event XYZ', 12, 4);活动ABC -每年5-11月举行,活动XYZ -每年12-4月举行
在我的events表中,我将month_from和month_to存储为数字值。
我希望能够做的是,将当前月份(10月)传递到sql查询中,以便向我返回正确的事件"Event ABC“。但我也想传递给它一个未来的月,比如说2月份,它应该返回给我“事件XYZ”
我希望这是有意义的?
发布于 2009-10-22 23:31:17
select * from tbl where (month_from <= $YOUR_MONTH and month_to >= $YOUR_MONTH) or (month_from > month_to and (month_to >= $YOUR_MONTH or month_from <= $YOUR_MONTH)
这也适用于DEC-APR范围
发布于 2009-10-22 01:27:01
尝试:
FROM TABLE t
WHERE @month BETWEEN t.month_from AND t.month_to如果您想要传递一个日期并获取日期之外的月份以进行比较:
FROM TABLE t
WHERE MONTH(@your_date) BETWEEN t.month_from AND t.month_to参考:MONTH
发布于 2009-10-22 01:17:36
select * from tbl
where month_from <= <YOUR_MONTH> and month_to >= <YOUR_MONTH>假设<YOUR_MONTH>的值在语义上等同于month_from和month_to字段。
更新:我注意到了从12月到4月的第二个例子。也许你可以为12月到12月和1月到4月的事件创建两个范围。
https://stackoverflow.com/questions/1602234
复制相似问题