查询没有在mysql中给出预期的结果

时间:2018-01-15 01:02:15

标签: php mysql sql

我的模型功能如下:

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的快照:

enter image description here

来自db1的

快照:

1 个答案:

答案 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天前的日期。