【发布时间】:2014-07-21 09:23:12
【问题描述】:
我正在加载所有事件并将其显示在日历上。当我点击像 21-07-2014 这样的一天时,它将获取该日期的所有记录,并通过 ajax 显示日历的右侧。我想要实现的是,我想获取 2014 年 7 月 21 日的所有事件以及从 2014 年 7 月 10 日开始并在前结束的事件:'31-07-2014'(通过给定的任何事件活动日期)
活动开始日期字段为 event_date,活动结束日期字段为 end_date
事件表结构:
CREATE TABLE IF NOT EXISTS `events` (
`event_id` int(11) NOT NULL,
`event_title` varchar(250) NOT NULL,
`event_date` datetime NOT NULL,
`end_date` datetime NOT NULL,
`location` varchar(100) DEFAULT NULL,
`description` text,
`event_photo` varchar(50) DEFAULT NULL,
`thumbnail` text NOT NULL,
`photo` text NOT NULL,
`user_id` int(11) NOT NULL,
`created_date` datetime DEFAULT NULL,
`created_by` int(11) DEFAULT NULL,
`modified_date` datetime DEFAULT NULL,
`modified_by` int(11) DEFAULT NULL,
`event_share_type` enum('1','0') DEFAULT NULL,
`delete_status` enum('1','0') DEFAULT '0',
`remarks` varchar(250) NOT NULL,
`status` enum('1','0') DEFAULT '1',
PRIMARY KEY (`event_id`) USING BTREE,
KEY `delete_status` (`delete_status`) USING BTREE,
KEY `event_id` (`event_id`,`user_id`,`created_date`,`delete_status`,`status`,`event_share_type`,`end_date`) USING BTREE,
KEY `remarks` (`remarks`) USING BTREE,
KEY `status` (`status`) USING BTREE,
KEY `user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是我的 Mysql 查询:
SELECT DISTINCT `Events`.`event_id` as id, `Events`.`event_title` AS `title`,
'Events`.`event_date` AS `start`, `Events`.`end_date` AS `end` FROM `events` AS `Events`
WHERE ((`Events`.`end_date` >= DATE("2014-07-10")) OR (`Events`.`event_date` LIKE '%2014-07-10%') OR (`Events`.`end_date` LIKE '%2014-07-10%')) AND `Events`.`delete_status` = '0' AND `Events`.`status` = '1' ORDER BY `Events`.`created_date` ASC;
这是 CakePhp 发现:
$this->Events->find('all', array(
'joins'=>$joins,
'conditions' => array(
'OR'=>array('Events.end_date >= DATE("'.$dateFormat.'")','Events.event_date LIKE' => "%".$dateFormat."%",'Events.end_date LIKE' => "%".$dateFormat."%")
,'Events.delete_status'=>'0','Events.status'=>'1','CP.circuit_id IN '.$my_circuits,'CP.circuit_post_id' => 2,'CP.delete_status'=>'0','CP.status'=>'Y'),
'order'=>'Events.created_date ASC',
'fields'=>array('DISTINCT Events.event_id as id','Events.event_title as title','Events.event_date as start','Events.end_date as end')
));
【问题讨论】:
-
实际上这是 CakePhp 生成的事件查找的 MySQL 转储。它工作得很好,除了让事件通过给定日期的条件说当前日期。
-
End_date 可以大于、等于或喜欢“x”。 那个是怎么工作的!?!
-
是的,它们是日期时间字段
-
所以日期开头的通配符没有任何作用。摆脱它,因为它只会让事情变得非常缓慢。
-
除此之外,如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更容易地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
标签: php mysql cakephp-1.3