2011-12-13 56 views
0

我得到了很少的DOB格式的客户名单yyyy-mm-dd。
我如何通过出生日期搜索客户,即使我先输入年份或月份或日期,它会显示结果。php搜索日期字符串

此刻,我需要使用格式yyyy-mm-dd来搜索它们。

$result = $db->query("SELECT f_name, l_name, dob, email FROM user WHERE dob LIKE'$keyword%' OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100") 

if($result) { 
    if($db->affected_rows()!= 0){ 

    // echo the result 

    } 
} 
+2

不完全知道你是问这里。你能举几个例子来说明你将要搜索的内容吗? – Turbotoast

+2

附注:通常,'affected_rows'返回受INSERT,DELETE,REPLACE或UPDATE语句影响的行。不过,不是来自SELECT。 –

+0

@LinusKleen感谢您的建议 – tonoslfx

回答

2

而不是LIKE,你可以使用YEAR()MONTH()DAY()来比较。要确保你正确逃脱$keyword已经...

$result = $db->query(" 
    SELECT f_name, l_name, dob, email 
    FROM user 
    WHERE 
    // The year, month, or day can be an exact match (note parentheses) 
    (YEAR(dob) = '$keyword' OR MONTH(dob) = '$keyword' OR DAY(dob) = '$keyword') 
    // Or the full yyyy-mm-dd date can be an exact match 
    OR DATE(dob) = '$keyword' 
    // OR UK date format 
    OR DATE(dob) = STR_TO_DATE('$keyword', '%d/%m/%y') 
    // or the rest of your conditions... 
    OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100" 
); 

编辑:围绕整数日期组件加引号,以避免字符串,而不是号码搜索时的语法错误。

+0

谢谢你真的有帮助:)。我在这个问题上忘了一些问题。即使数据库中的日期格式为(yyyy-mm-dd),是否可以使用英国格式(dd/mm/yyyy)搜索DOB?我该怎么做:) – tonoslfx

+0

@ boyee007也许通过'STR_TO_DATE()'。见上面的增加。如果输入不符合格式dd/mm/yy,我不确定函数调用是否会失败。 –

+0

再次感谢。它不会很快返回任何我输入09'/' – tonoslfx

1

在我看来,这将是更好的PHP正常化日期:

$date = strtotime($keyword); 
$result = $db->query(' 
    SELECT f_name, l_name, dob, email 
    FROM user 
    WHERE 
    f_name LIKE "$keyword%" 
    OR l_name LIKE "$keyword%" 
    '.($date&&$date!=-1?'OR dob="'.date('Y-m-d',$date).'"':'').' 
    LIMIT 100 
');