我的模型功能如下:
function get_newJoineesList($limit=''){
$SQL ="
SELECT userid as uid, CONCAT( firstname, ' ', lastname ) AS name,profileimage, joining_date, role as designation
FROM pr_users_details
INNER JOIN pr_users ON pr_users.id = pr_users_details.userid
LEFT JOIN pr_userroles ON pr_userroles.id=pr_users.userroleid
WHERE joining_date > DATE_SUB( NOW()-1 , INTERVAL 15 DAY )
ORDER BY pr_users_details.id DESC";
if($limit!=''){
$SQL.=" LIMIT ".$limit;
}
$query = $this->db->query($SQL);
$return = $query->result_array();
return $return;
}
我想得到15天前到现在的所有结果,即如果今天是15日,则检索所有加入日期在1-15之间。但不知何故上述查询不起作用。我也被限制只使用varchar(15)类型,因为更改这将影响其他模块。 来自db2的快照:
来自db1的快照:
答案 0 :(得分:1)
问题是您存储日期的方式与mysql识别日期文字的方式不对应,因此日期计算将不正确。您必须使用str_to_date()函数将字符串转换为有效日期:
SELECT userid as uid, CONCAT( firstname, ' ', lastname ) AS name,profileimage, joining_date, role as designation
FROM pr_users_details
INNER JOIN pr_users ON pr_users.id = pr_users_details.userid
LEFT JOIN pr_userroles ON pr_userroles.id=pr_users.userroleid
WHERE str_to_date(joining_date,'%d-%c-%Y') > DATE_SUB( NOW()-1 , INTERVAL 15 DAY )
ORDER BY pr_users_details.id DESC
此外,我会考虑使用curdate()
代替now()
,因为您只处理日期,而不是时间。由于时间成分,使用now()
可能会产生有趣的副作用,即排除15天前的日期。