我正在尝试选择介于两个日期之间的值,因此我必须使用< =和> =,但是,我的查询似乎表现为小于或大于且不考虑值等于约会。
我正在使用CakePHP,以“Y-m-d h:i:a”格式保存日期。我想在给定的一周间隔(从星期日开始)找到日期,所以我使用了以下内容。
$start_date = date('Y/m/d', strtotime('last Sunday', strtotime($timestamp)));
$formatted_start_date = str_replace("/","-",$start_date);
我试图将$ start_date格式化为“Ymd”,但之后它找不到正确的日期,所以我将其切换到它的方式并使用str_replace将其格式化为使用“ - ”而不是“/” ”
$date_query = $this->Order->query("select * from orders where id = '$id' and created => '$formatted_start_date' and created <= '$current_timestamp' ");
考虑到我的数据库中的时间值是“Y-m-d h:i:a”格式,我可以使用“Y-m-d”进行日期比较吗?是否可以执行涉及LIKE和&lt; =?
的MySQL查询答案 0 :(得分:9)
无需str_replace()
- 只需获取Y-m-d
:
$start_date = date('Y-m-d', strtotime('last Sunday', strtotime($timestamp)));
然后,使用CakePHP约定(是的,您可以使用Ymd进行日期比较,而不是手动创建查询,即使存储在数据库中的日期时间为Ymd H:i:s) < / p>
$this->Order->find('all', array(
'conditions' => array(
'id' => $id,
'created >=' => $start_date,
'created <=' => $end_date . ' 23:59:59',
'my_field LIKE' => '%whatever%'
));
虽然 - 这看起来有点奇怪 - 通常你要么通过'id'或日期范围寻找东西 - 而不是两者兼而有之。但是 - 也许你有理由:)
正如您在上面所见,是的,如果需要,您也可以添加“LIKE”。
答案 1 :(得分:0)
上面的回答是完全正确的,但你可以使用cakePHP time helper更简单的方法,它有函数daysAsSql,它可以将时间可读的字符串转录到数据库范围内。
http://book.cakephp.org/2.0/en/core-libraries/helpers/time.html#TimeHelper::daysAsSql
答案 2 :(得分:0)
只需像这样添加条件数组。
$resl = $this->DBNAME->find('all',array(conditions=>array('date1>date','date1<date')));
替换&#39; date&#39;和你的约会。
这对我有用。
答案 3 :(得分:0)
在您的控制器中试用
$searchTutorQuery = $this->Tutordetails->find('all', array(
'conditions' => array(
"User.zip" => $zipcode1,
"Tutordetails.user_id"=>$uid,
"Tutordetails.subject_id" => $subjectName,
"Tutordetails.hourly_rate >=" => $hourly_rate
),
//"User.id =" => $userid,
'fields' => array('user_id', 'Tutordetails.subject_id', 'Tutordetails.hourly_rate',
'User.zip', 'Tutordetails.zip'),
'order' => array('Tutordetails.id DESC')
));